Показать сообщение отдельно
Старый 20.10.2006, 17:56
sngbiz вне форума Посмотреть профиль Отправить личное сообщение для sngbiz Найти все сообщения от sngbiz
  № 3  
Ответить с цитированием
sngbiz

Регистрация: Jun 2005
Сообщений: 57
Код:
class FindReplaceText
{
	public var strForFind:String;
	public var textFields:Array = [];
	public var fieldIndex:Number = 0;
	
	function FindReplaceText()
	{
	}
	
	public function setTargetFields(fields:Array):Void
	{
		textFields = fields;
	}
	
	public function findText(str:String):Void
	{
		if (str == "")
			return;
		
		strForFind = str;				
		var allText:String = textFields[fieldIndex].text.toLowerCase();
		var fStr:String =  str.toLowerCase();	
		var search_res:Number = allText.indexOf(fStr, Selection.getEndIndex());
		if (search_res != -1)
		{
			strForFind = fStr;
			Selection.setFocus(textFields[fieldIndex]);
			Selection.setSelection(search_res, search_res + fStr.length);
			onFindTextAt(textFields[fieldIndex]);
		}
		else
		{
			if (beStrAtFields())
			{
				fieldIndex ++;
				if (fieldIndex == textFields.length)
					fieldIndex = 0;
				onChangeFieldAs(textFields[fieldIndex]);
				findText(strForFind);
			}
			else
				onNoSearchingStr();
			
		}
	}
	
	public function replaceWith(strF:String, strR:String, all:Boolean):Void
	{
		if (textFields[fieldIndex].text.substring(Selection.getBeginIndex(), Selection.getEndIndex()) != strF)
		{
			findText(strF, all);
			return;
		}
		textFields[fieldIndex].replaceSel(strR);
		if (!beStrAtFields())
			return;
		Selection.setSelection(Selection.getBeginIndex(), Selection.getBeginIndex() + strR.length);
		findText(strF, all);
	}
	
	public function replaceAll(findTxt:String, replaceTxt:String):Void
	{
		var rep:Number = 0;
		for (var i:Number = 0; i < textFields.length; i ++)
		{
			onChangeFieldAs(textFields[i]);	
			var allText:String = textFields[i].text.toLowerCase();
			var fStr:String =  findTxt.toLowerCase();		
			var search_res:Number = allText.indexOf(findTxt, 0);
			while (search_res != -1)
			{
				rep ++;
				Selection.setSelection(search_res, search_res + fStr.length);	
				textFields[i].replaceSel(replaceTxt);			
				allText = textFields[i].text.toLowerCase();			
				var rr = search_res + replaceTxt.length;
				search_res = allText.indexOf(findTxt, search_res + replaceTxt.length);
			}
		}
		if (rep == 0)
			onNoSearchingStr();
		else
			onFindAndReplaced(rep);
	}
	
	public function beStrAtFields():Boolean
	{
		for (var i:Number = 0; i < textFields.length; i ++)
		{
			var allText:String = textFields[i].text.toLowerCase();
			var fStr:String =  strForFind.toLowerCase();		
			var search_res:Number = allText.indexOf(fStr, 0);
			if (search_res != -1)
				return true;
		}
		
		return false;
	}
	
	public function onNoSearchingStr():Void
	{
	}
	public function onFindAndReplaced(n:Number):Void
	{		
	}	
	public function onChangeFieldAs(field:TextField):Void
	{
	}	
	public function onFindTextAt(field:TextField):Void
	{		
	}
}