Листинг 7.8. Удаление пустых фреймов

myDocument = арр.activeDocument; myTextFrames = myDocument.textFrames

// Строка поиска - искать любые кириллические или латинские символы

searchString = "/[a-Za-Я]/"

for (i=0; i< myTextFrames.length; i++){

// Если поиск ничего не дал, т. е. если в тексте // нет ни одного из искомых символов

if (myTextFrames[i].contents.match( searchString ) == null) { myTextFrames[i].remove() i-

)

)

После каждого удаления фрейма количество циклов уменьшаем на единицу- ведь фреймов стало меньше.

7.3.3. Удаление пустых абзацев

Пустым абзацем будем считать такой, в котором нет других символов, кроме символов абзаца или пробелов с табуляторами.

Для решения подобной задачи также будем использовать возможности регулярных выражений (листинг 7.9). Некоторые могут возразить, что в InDesign возможно последовательно использовать комбинацию для поиска \р\р с заменой на \р. Это так. Однако такой вариант не позволит удалить абзацы, в которых есть один или несколько символов пробела, табуляции, а также их комбинации. Регулярные выражения как раз и предназначены для поиска по таким нечетким критериям.

Листинг 7.9. Удаление пустых абзацев

// Поиск: в начале абзаца могут быть пробелы или символы табуляции,

// но обязательно должны присутствовать хотя бы два знака абзаца // или новой строки

// [\г\п]+ относятся к поиску "лишних" символов абзаца и новых строк searchString = "/л[ \t]*[\r\n]+[\r\n]/"

// Меняем на один абзац replaceString = "\г"

myTextFrames = app.activeDocument.textFrames; for (i=0; i< myTextFrames. length;' i++) {

for (j =0; j< myTextFrames[i].paragraphs.length; j++){ try {

with(myTextFrames[i].myParagraphs[j])(

if ((footnotes.length < 1) && (contents !=

SpecialCharacters.columnBreak) && (contents != SpecialCharacters.pageBreak)) ( myTextFrames[i].myParagraphs[j].contents =

contents.replace(searchString, replaceString)

)

)

)

catch(err) alert("Some problems encountered!")

)

Разберем подробнее строку поиска. Сначала указываем, что поиск должен проводиться только в начале абзаца, затем в квадратных скобках - набор символов, которые должны идти первыми (пробел и знак табуляции). Знак * говорит о том, что любой из символов может как встречаться, так и не встречаться вообще. Также учтем, что символов абзаца может быть несколько ([\г\п] +). И конец последовательности - [\г\п].

Давайте рассмотрим все возможные при поиске ситуации. Если в абзаце только текст, то никаких проблем быть не должно. Однако кроме текста в абзаце может быть графика, таблица, ссылки- вот тут кроются источники потенциальных проблем. Поэтому мы должны уделить особое внимание таким объектам.

Если протестировать скрипт на таких ситуациях (такой подход- обычное дело при скриптинге), то увидим, что все ситуации обрабатываются корректно, кроме абзацев с примечаниями, а также служебными абзацами- они часто играют роль выталкивателей для текста и т. п. - поэтому в строку поиска была добавлена проверка наличия символов


⇐ вернуться назад | | далее ⇒