Подсветка слов во Flash с использованием ActionScript 3.0 - PullRequest
0 голосов
/ 10 апреля 2011

Я делаю текстовый редактор с использованием Flash Professional CS4 и ActionScript 3.0

Это почти закончено, мне нужно только добавить функцию, которая выделяет некоторые «теги», такие как «[NAME]» и «[AGE] "(изменяя его цвет) всякий раз, когда они пишутся.

Я использую textField, а не компонент TextArea. Это код, который я использую, но он не работает, как планировалось.

taMain.addEventListener(Event.CHANGE, checkTags);
function checkTags(e):void{
    var tempFormat:TextFormat = taMain.getTextFormat(taMain.selectionBeginIndex - 1, taMain.selectionEndIndex);
    var splitText:Array = taMain.text.split(" ");
    for (var i = 0; i < splitText.lenght; i++) {
        switch (splitText[i]) {
            case "[NAME]":
                tempFormat.color = (0xff0000);
            break;
            case "[AGE]":
                tempFormat.color = (0x0000ff);
            break;
            default:
                tempFormat.color = (0x000000);
        }
        taMain.setTextFormat(tempFormat, taMain.text.indexOf(splitText[i]), taMain.text.indexOf(splitText[i]) + splitText[i].length );
    }
}

Этот код работает только при первом использовании тега, но не меняет цвет при повторном использовании тега.

Есть идеи?любую другую функцию, которую я мог бы использовать?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2015

С помощью регулярных выражений легко найти слово / фразу, если ваш ввод находится в диапазоне ASCII (например, без немецких умлаутов).Затем вы можете инкапсулировать свой поисковый термин в \ b следующим образом:

/\bMyVar\b/g 

Это будет соответствовать каждому вхождению MyVar, но только если это целое словоMyVarToo, например, не будет соответствовать, потому что \b относится к границе слова.

0 голосов
/ 10 апреля 2011

taMain.text.indexOf(splitText[i]) всегда найдет первое вхождение слова, например, первое «[NAME]», и установит формат текста для этого первого вхождения, даже если цикл for находится в другом вхождении «[NAME]".

indexOf () принимает второй необязательный параметр, с которого начинается индекс, чтобы вы могли отслеживать, где в тексте вы находитесь, выполнив что-то вроде этого:

var tempFormat:TextFormat = taMain.getTextFormat(taMain.selectionBeginIndex - 1, taMain.selectionEndIndex);
var splitText:Array = taMain.text.split(" ");
var startIndex:Number = 0;
for (var i = 0; i < splitText.length; i++) {
    switch (splitText[i]) {
        case "[NAME]":
            tempFormat.color = (0xff0000);
        break;
        case "[AGE]":
            tempFormat.color = (0x0000ff);
        break;
        default:
            tempFormat.color = (0x000000);
    }
    taMain.setTextFormat(tempFormat, taMain.text.indexOf(splitText[i], startIndex), taMain.text.indexOf(splitText[i], startIndex) + splitText[i].length );
    startIndex = taMain.text.indexOf(splitText[i], startIndex) + splitText[i].length;
}

Но я не думаю, что разбиение на пробелы, как в var splitText:Array = taMain.text.split(" "), является хорошим способом поиска слов в общем тексте.Что, если [ВОЗРАСТ] является последним словом строки, с разрывом строки после него, или после [ИМЯ] запятая, как в «Привет [ИМЯ], как дела?»?Код выше пропустит эти случаи.

...