
Код:
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
{
}
}