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 отлично демонстрирует возможности регулярных выражений.