Листинг 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!")
)
Разберем подробнее строку поиска. Сначала указываем, что поиск должен проводиться только в начале абзаца, затем в квадратных скобках - набор символов, которые должны идти первыми (пробел и знак табуляции). Знак * говорит о том, что любой из символов может как встречаться, так и не встречаться вообще. Также учтем, что символов абзаца может быть несколько ([\г\п] +). И конец последовательности - [\г\п].
Давайте рассмотрим все возможные при поиске ситуации. Если в абзаце только текст, то никаких проблем быть не должно. Однако кроме текста в абзаце может быть графика, таблица, ссылки- вот тут кроются источники потенциальных проблем. Поэтому мы должны уделить особое внимание таким объектам.
Если протестировать скрипт на таких ситуациях (такой подход- обычное дело при скриптинге), то увидим, что все ситуации обрабатываются корректно, кроме абзацев с примечаниями, а также служебными абзацами- они часто играют роль выталкивателей для текста и т. п. - поэтому в строку поиска была добавлена проверка наличия символов