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, и возникнет ошибка).


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