Все операции поиска/замены условно можно разделить на три типа:
традиционные (поиск/замена одного фрагмента на другой с форматированием);
поиск специальных символов (короткое тире, неразрывный дефис, символ табуляции и т. п.);
поиск без четких критериев (по маске).
Поскольку, как правило, в процессе поиска/замены меняется количество символов в тексте, потенциапьно возможно возникновение проблемных ситуаций: например, если текста стало меньше, то могут возникнуть ссылки на несуществующий текст. В то же время, в своей практике автор ни разу не встречался с такими проблемами (спасибо программистам из Adobe), если же вдруг они возникнут, решение достаточно простое: нужно искать не с начала, а с конца текста. В гаком случае никакая операция замены к смещению в индексации символов не приведет.
7.1. Встроенные функции InDesign CS, CS2
Для операций поиска/замены в InDesign CS и CS2 предусмотрено использование объектов findPreferences И changePreferences соответственно, а параметры поиска или замены (аналоги опций в окне Find/Replace) задаются как свойства этих объектов. Иными словами, объекты являются ничем иным, как стилем для выполнения соответствующей операции. Перед проведением по-иска'замены их желательно очищать (как известно, InDesign при повторном вызове окна Find/Replace храиит ранее введенные значения)- для этого предусмотрено специальное значение NothingEnum.nothing.
7.1.1. Поиск текста без форматирования
Вот как происходит поиск неформатированного текста встроенными функциями InDesign:
// Сброс предыдущих настроек. Операция обязательна, поскольку InDesign // помнит параметры предыдущего поиска арр.findPreferences •= NothingEnum.nothing; app.changePreferences = NothingEnum.nothing;
// Поиск в документе текста "Пример", арр.findPreferences.findText = " Пример";
// Установка пользовательских настроек для поиска with (арр.findPreferences)( caseSensitive = false; wholeWord = false;
)
var myFoundltems = app.documents[0].findText();
alert("Найдено " + myFoundltems.length + " совпадений");
7.1.2. Замена текста без форматирования
Кроме поиска, InDesign может заменять одни фрагмент текста на другой. Рассмотрим простейший пример замены текста без учета форматирования (листинг 7.1).
■ Листинг 7.1. Замена текста без форматирования
// Сброс предыдущих настроек
app.findTextPreferences = NothingEnum.nothing; app.changeTextPreferences = NothingEnum.nothing;
// Установка опций для поиска
app.findChangeTextOptions.caseSensitive = false; app.findChangeTextOptions.wholeWord = false;
// Замена одной строки "copy" на другую "text" app.findPreferences.findText = "copy"; app.changePreferences.changeTo = "text"; app.documents[0].changeText();
// Подготовка к следующему поиску/замене
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;