Speciaicharacters.columnBreak И Speciaicharacters.pageBreak.
Итак, единственным реальным исключением из проверки текста станут сноски - будем надеяться, что в тексте их окажется не много.
7.3.4. Автоматизация форматирования
Автоматизация форматирования - одна из самых популярных областей применения скриптинга. Рассмотрим несколько примеров, иллюстрирующих возможности программирования InDesign в данной сфере.
Первый пример из реальной жизни. Допустим, нужно все слова, в которых используются латинские буквы, сделать наклонными. Скрипт будет занимать всего несколько строк:
w = арр.activeDocument.selection[0].words
for(j=0; j<w.length; j++){
if (w[j].contents.search(/[A-Za-z]+/)!=-l) w[j].fontstyle = 'Italic'
}
Для удобства мы обрабатываем слова только в выделенной части. Это позволяет гибко использовать скрипт. Диапазон [A-Za-z] задает все латинские буквы, в том числе с учетом регистра.
Рассмотрим более сложный пример, позволяющий упростить определенное форматирование фрагментов текста. Например, в публикации имеется рубрика с интервью, которое нужно отформатировать следующим образом:
Q: текст1 (серый цвет)
А: (красный цвет) абзац 1 абзац 2
абзац N
Q: текст2 (серый цвет)
А: (красный цвет) абзац 7V+1 абзац N+2
абзац N+ М
В принципе, ничего сложного - выделяешь ручками один фрагмент, переходишь к другому и т. д. Но мы-то уже не будем делать это вручную- ведь четко просматривается принцип форматирования: до двоеточия идет одна стилевая разметка, затем - вторая и т. д., и грех этим не воспользоваться. Используем возможности JavaScript, рассматривая знак двоеточия как разделитель (листинг 7.! 0).
I Листинг 7.10. Форматирование интервью
aD = арр.activeDocument;
pars = aD.selection[0].paragraphs
pS = aD.paragraphStyles;
pSA = [] ;
cS = aD.characterstyles;
cSA = [] ;
for (i=2; i<pS.length; i++){ switch(pS[i].name){ case 'Question':
// Абзац с серым цветом шрифта pSA[' Question '] = i; break; case 'Answer':
pSA[' Answer '] = i; break;
)
}
for (i=0; i<cS.length; i++){ switch(cS[i].name){ case 'Red':
cSA['Red'] = i; break;
)
}
for (i=0; i<pars.length; i++){ while (pars[i+1]!=null){
s = pars[i].texts[0].contents.search(':') if (s>0 && s<10)(
pars[i].applyStyle(pS[pSA ['Question']], true) pars[i+1].applyStyle(pS[pSA ['Answer']], true) si = pars[i+1].texts[0].contents.search(1:') pars[i+1].characters.itemByRange(0, s).applyStyle(cS [cSA ['Bold']], true) i++
}else{
pars[i].appIyStyle(pS [pSA ['Answer']], true)
}
)
)
Для корректной работы скрипта было решено использовать стили символов: первый необходимый - Red- им будем форматировать блок ответчика. Для вопроса автора используем стиль абзацев Author, для текста абзац 1, абзац 2, .... абзац N- стиль Reply.
Начало - традиционное: сканируем публикацию на наличие стилей и получаем на них сноски. Следующий шаг- начинаем просматривать абзацы. Делаем проверку: если знак двоеточия находится в самом начале абзаца (вплоть до 10-го символа), абзац форматируем стилем Question. Проверка s>o нужна для того, чтобы быть уверенным, что двоеточие все же имеется (если его нет, значение, возвращенное поиском, будет-1 , которое меньше 10, и возникнет ошибка).