Рис. 7.1. Граница текста в списке Последнее действие - перевод выражений "кв.м", "куб.м" в принятую форму (м2, м3). Его будем проводить стандартными средствами InDesign.
Итак, основная работа выполнена. Осталось только оформить наши записи в виде скрипта (листинг 7.11). Регулярные выражения в JavaScript задаются между двумя косыми чертами (слэшами), а ключ д означает многократную замену (global). Также предусмотрен ключ i - игнорирование регистра (т. е.
менять как строчные, так и прописные буквы), мо нам он не понадобится. Поиск будем проводить по очереди в каждом абзаце выделенного текстового фрагмента. Итак, можем записать для блока базовых преобразований.
• Листинг 7.11. Автоматический корректор
findl = / {2,}/g;
replacel = " " // Замена множества пробелов
find2 = /(\d) ?(-)-) ?(\d)/g;
replace2 = "$1" + "\u2011" + "$3" // Неразрывное тире между цифрами,
// удаление лишних пробелов
find3 = /(.) (-I-) (.)/д;
replace3 = "$1" + "\хА0" + "\u2013" + "\хА0" + "$3" // Неразрывные
// пробелы вокруг тире
find40 = /([лм])(\d) /д;
replace40 = "$1"+"$2"+"\хА0" // Пробел после числа - неразрывный
fina41 = /(тыс|млн|мпрд)\.? ?/д; гер1асе41 = "$1"+"\.\хА0" // Учитываем множители
/'/ Остальные операции поиска/замены: find5 = /([А-Я]{2,}) (”]")/д
replaces = "$1"+"\хА0"+"$2" // Не отрывать форму собственности
// от названий
find6 = /А([\x95\u2013\u2014\x2D])/д; replace6 = "$1" + "\u2002" + п\х07"
// В списке - фиксированный пробел + Indent Неге
find7 = /л(м\.кв\.)/д; replace7 = "м@@"
find8 = /л(м\.куб\.)/д; replaces = "м@@0" С инструментарием JavaScript закончили, вернемся опять к возможностям InDesign. Определим диапазон поиска. Поиск будем проводить только в текстовых абзацах, игнорируя таблицы и иллюстрации. Кроме того, как показала практика, необходимо учитывать наличие сносок, поскольку InDesign некорректно обрабатывает поиск в них. Анализ объектной модели программы по казал, что в параметрах абзаца предусмотрены свойства tables (наличие таблиц), aiiGraphics (иллюстраций) и сносок (footnotes), чем мы и воспользуемся.
Итак, проводим замены по очереди в каждом выделенном абзаце (листинг 7.12).
Листинг 7.12. Замена в таблицах, иллюстрациях, сносках
pars = арр.selection[0].paragraphs for (i=0; i<pars.length; i++) {
if ( (pars [i] .tables, lengthcl) && (pars [i] . aiiGraphics. lengthcl) &£.
(pars[i].footnotes.lengthcl) ) {
myContents = pars[i].contents.replace(findl, replacel) myContents = myContents.replace(find2, replace2) myContents = myContents.replace(find3, replace3) myContents = myContents.replace(find40, replace40) myContents = myContents.replace(find41, replace41) myContents = myContents.replace(find5, replaceb) myContents = myContents.replace(find6, replace6) myContents = myContents.replace(find7, replace7)