Таблица 7.1. Конструкции, используемые в регулярных выражениях для поиска
Действие |
Обозначение |
Поиск текста с учетом регистра |
(?i) |
Игнорирование регистра |
(?-i) |
Поиск выражения в начале слова |
\> |
Поиск выражения в конце слова |
\< |
Поиск выражения в начале и в конце слова |
\Ь |
Любой символ |
\s |
Пробел |
\w |
В листинге 7.6 приведен пример замены текста с разметкой, сделанной в PageMaker, для использования в InDesign.
Листинг 7.6. Замена текста с разметкой
var myName, myString, myStyle, myStyleName; var myDocument = app.documents.item(0); app.findGrepPreferences = NothingEnum.nothing; app.changeGrepPreferences = NothingEnum.nothing;
// Поиск тегов разметки.
// Поскольку использующийся в ней символ "\" является служебным,
// для правильного его восприятия перед ним ставят такой же символ,
// сигнализируя о том, что дальше идет специальный символ.
арр.findGrepPreferences.findwhat = "(?i)A<\\s*\\w+\\s*>"; var myFoundltems = myStory.findGrep() ;
if(myFoundlterns.length != 0)( var myFoundTags = new Array; for(var i= 0; i<myFoundItems.length; i++){ myFoundTags.push(myFoundltems[i].contents);
}
// Собираем все использованные теги, повторы не включаем myFoundTags = myRemoveDuplicates(myFoundTags);
// Мы собрали все использованные теги разметки for(i= 0; i< myFoundTags.length; i++){ myString = myFoundTags[i];
//По очереди ищем каждый тег арр.findTextPreferences.findwhat = myString;
// Получаем название тега
myStyleName = myString.substring(1, myString.length-1);
// Создаем стиль с названием тега, если он еще не существует try{
myStyle = myDocument.paragraphStyles.item(myStyleName); myName = myStyle.name;
}
catch (myError){
myStyle = myDocument.paragraphStyles.add({namermyStyleName});
}
// Применяем стиль ко всему тексту, имеющему текущий тег ■ арр.changeTextPreferences.appliedParagraphStyle = myStyle; myStory.changeText ();
// Подготовка к следующему поиску/замене арр.changeTextPreferences = NothingEnum.nothing; арр.changeTextPreferences.changeTo =
// Собственно замена myStory.changeText() ;
app.changeTextPreferences = NothingEnum.nothing;
app.findGrepPreferences = NothingEnum. nothing;
}
function myRemoveDupl.icates(myArray){
// Поиск дубликатов в массиве с названиями тегов var myNewArray = new Array;
// Сортируем - в таком случае при поиске дубликата // не потребуется пробегать по всему массиву - дубликаты // будут идти сразу за текущим элементом myArray = myArray.sort();
// Создаем новый массив из одного элемента - текущего тега myNewArray.push(myArrayL0]); if(myArray.length > 1){
for(var i= 1; i< myArray.length; i++){
if(myArray[i] != myNewArray[myNewArray.length -1]){
// В новый массив повторения не попадут myNewArray.push(myArray[i]);
}
}
}
return myNewArray;
}
7.3. Использование возможностей JavaScript
Поскольку автор занимается в том числе версткой изданий экономической направленности, которые изобилуют цифрами, сокращениями, а возможности InDesign CS2 в части замены довольно скромны, несмотря на внушительные размеры диалогового окна, встал вопрос как-то обойти его ограничения.