// для пустых абзацев
searchString_2 = ”/л[ \t]*[\r\n]+[\r\n]/" replaceString = "\r" styleApplied =
myTextFrames = myDocument.textFrames for (i=myAllItems.length-1; i>-l; i-){
if (myAllItems[i].constructor.name == "TextFrame") {
// Удаление пустых текстовых фреймов
if (myAllItems[i].contents.match( searchString_l ) = null) { myAllItems[i].remove()
} else {
myParagraphs = myAllItems[i].paragraphs; for (j=myParagraphs.length-1; j>-l; j-){ with(myParagraphs[j]){
Глава 6
// Для поиска неиспользуемых стилей styleApplied += appliedParagraphStyle.name;
11 Обрабатываем исключения if (footnotes.lengthcl && contents != 'b
1396927554 && contents != 1397773242) {
// Удаление пустых абзацев myAUItems [i] .paragraphs [j ]. contents = 'b myAUItems [i] .paragraphs [j ] . 'b contents.replace(searchString_2, replaceString)
}
}
}
}
}
}
// Удаление неиспользуемых стилей
for (i=myParagraphStyles.length-1; i>l; i-){
ix = styleApplied.search(myParagraphStyles[i].name); if (ix = -1) {
myParagraphStyles[i].remove() ;
}
}
// Уборка монтажного стола
myObjs = myDocument.pageltems.everyltemf).parent; for (var j = myObjs.length - 1; j >= 0; j-) {
// Проверяем родителя.
// Если страница, то объект пропускаем
if (myObjs[j].constructor.name == "Page") continue;
// Иначе - в корзину
myDocument.pageltems[j].remove());
}
// Удаляем неиспользуемые цвета myUnusedSwatches = myDocument.unusedSwatches for (var j = myUnusedSwatches.length - 1; j >= 0; j-) { myUnusedSwatches[j].remove()
}
Удаление заякоренных текстовых блоков в скрипт не включено, поскольку это потенциально опасно для уже сверстанных материалов- ведь в них вполне могут присутствовать заякоренные объекты, которые были специально размещены именно таким образом. В принципе можно обойти и это ограничение, если якорям были назначены стили - в таком случае достаточно проверять наличие у них стиля (objectstyle), и если он Basic Frame (стиль по умолчанию, т. е. рука верстальщика его не касалась), то удалять. Конечно, свое название скрипт оправдывает лишь частично, на самом деле он является только подготовкой к основной уборке, которая будет затеяна в скрипте "Автоматический корректор" (см. разд. 7.3.5).
ГЛАВА 7
Поиск и замена
Поиск и замена в тексте-- одна из наиболее часто встречающихся операций. К сожалению, встроенные средства редактора достаточно скромны и основное отличие InDesign CS и CS2 от Notepad (Блокнота) в этом вопросе состоит лишь в поддержке форматирования. Так, обе этих версии не позволяют замену фрагментов по гибкой маске (например, проводить замену слов, начинающихся с определенных символов) - а только один четко определенный фрагмент на другой. Так, например, заменить "кв. м" на "м2" невозможно, сочетание "цифра-тире-цифра" на "цифра-неразрывное тире-цифра", "цифра-пробел" на "цифра-неразрывный пробел" также-- примеров можно привести массу.
В то же время в JavaScript встроены мощные функции поиска/замены (на базе регулярных выражений), что позволяет выполнять операции любой степени сложности. Одно ограничение: JavaScript работает с текстом исключительно как со строкой, поэтому форматирование (по идее) сохраняться не должно. В то же время заложенный в InDesign механизм сохранения форматирования работает корректно не только при замене текста внутренними функциями (через Find/Replace), но также и через JavaScript. Во всяком случае, при использовании внешнего механизма автору не известна ни одна проблема потери форматирования. Дополнительное достоинство скригггинга- возможность формирования целого пакета операций поиска/замены с последующим исполнением их одним нажатием клавиши.