alert(арр.selection[0].paragraphs[0].charCodeAt[0])

(Есть подозрения, что в обновленной версии ExtendScript эта возможность убрана, автором тестировалась оригинальная сборка, идущая в поставке с CS2.)

7.3.1. Проверка регулярных выражений JavaScript

Процесс освоения синтаксиса регулярных выражений и особенностей работы с ними займет определенное время. Поэтому, чтобы его свести к минимуму, напишем утилиту, помогающую в поиске нужного выражения: вы вписываете свой вариант регулярного выражения, задаете текст, в котором будет проходить проверка, и скрипт выделяет в тексте фрагменты, соответствующие условиям поиска. Если соответствие не найдено, выдается предупреждение. Преимущество скрипта- оперативность: модифицируя строку поиска, вы сразу же проверяете ее на тексте, добиваясь нужного результата. Это позволит сэкономить значительное время - даже в сравнении с использованием возможностей ExtendScript Editor.

Используем уже рассматривавшуюся функцию проверки типа выделения - для уверенности, что выделен действительно текстовый, а не какой-либо другой объект:

Object.prototype.isText = function() { switch(this.constructor.name)( case "InsertionPoint": case "Character": case "Word": case "TextStyleRange”: case "Line": case "Paragraph": case "TextColumn": case "Text":

"TextFrame": return true; default :

return false;

}

}

А вот сам скрипт (листинг 7.7).

Листинг 7.7. Проверка регулярного выражения

myErr = "Выбран не текст!"; myDoc = app.activeDocument; myRange = app.selection[0]; if (!myRange.isText())

(

errorExit(myErr);

} else {

if (myRange.constructor.паше == "InsertionPoint") ( myRange = getParentTextFlow(myRange); myREtext = prompt("Введите регулярное выражение:",’ if (myREtext == null) ( errorExit () ;

}

myRE = new RegExp(myREtext, "g"); myTest = myRE.exec(myRange.contents); myReport = "Искомое выражение:" if (myTest == null)

{

myReport += "ХпНичего не найдено";

) else (

while(myRE(myRange.contents)){

// Определяем оставшийся после поиска фрагмент текста Start = myRE.lastlndex - myREtext.length;

End = myRE.lastlndex-l;

// Выделяем каждое соответствие по очереди myRange.characters.itemByRange(Start,End).select()

)

}

)

)

Вспомогательные функции:

function errorExit(message) ( if (arguments.length > 0)

(

alert(message); exit();

)

}

function getParentTextFlow(theTextRef) (

if (theTextRef.parent.constructor.name = "Cell") {

return theTextRef.parent.texts[0];

} else {

return theTextRef.parentStory;

}

}

7.3.2. Удаление пустых фреймов

Одна из наиболее часто используемых задач при работе с текстом - поиск и замена одного фрагмента на другой. Предположим, стоит задача очистить публикацию от пустых фреймов - она отлично подходит для демонстрации работы с содержимым текстовых фреймов. Будем считать пустыми такие фреймы, в которых нет ни одной латинской или кириллической буквы, т. е. у которых содержимое состоит из одних только переносов строк, символов табуляции или пробелов. Пример из листинга 7.8 отлично демонстрирует возможности регулярных выражений.


⇐ вернуться назад | | далее ⇒