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

К сожалению, присвоение стиля тексту - не такая простая операция, как например, присвоение цвета. Дело в том, что InDesign хранит стили не по их названиям, как они отображаются в палитре Paragraph Styles, а по их индексам, поэтому присвоить стиль непосредственно по его названию не получится. Соответственно, сначала нужно просмотреть весь список используемых в публикации стилей, для каждого запомнить его индекс, по которым в дальнейшем к ним обращаться.

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

Например, это можно реализовать следующим образом:

parStyles = myDocument.paragraphStyles; При нахождении заданных стилей запоминаем их индексы в виде переменных:

for (i=0; i< parStyles.length; i++){ switch(parStyles[i].name){ case 'Table Header1: var TableHeader = i; break; case 'Table Footer': var TableFooter = i; break; case 'Table contents': var TableContents = i; break; case 'Table': var Table = i; break; case 'Mv_Style': var My_Style = i; break;

}

}

Если какой-то из искомых стилей найден, то продолжать его дальнейший поиск смысла нет, можно переходить к поиску следующего. Присвоение стиля в таком случае происходит следующим образом:

myParagraphl.applyStyle(parStyles [TableHeader], true); myParagraph2.applyStyle(parStyles [TableFooter], true); myParagraph3.applyStyle(parStyles [TableContents], true); myParagraph4.applyStyle(parStyles [Table], true); Гораздо нагляднее, не правда ли? Как правило, перед запуском скрипта следует убедиться в том, что все необходимые стили присутствуют. В таком случае можно поступить так: при каждом сравнении устанавливать соответствующий флаг:

flagStorage = new Array() for (i=0; i< parStyles.length; i++){ switch(parStyles[i].name){ case 'Table Header': var TableHeader = i; flagStorage [0]=true; break; case 'Table Footer': var TableFooter = i; flagStorage [l]=true; break;

case 'Table contents': var TableContents = i; flagStorage [2]=true; break; case 'Table': var Table = i; flagStorage [3]=true; break; case 'My_Style': var My_Style = i; flagStorage [4]=true; break;

}

}

Тогда проверка будет выглядеть так:

if (flagStorage [0] && flagStorage [ 1] && flagStorage [2] && 'Ъ flagStorage[3] && flagStorage[4]) {

// Дальше идет основной скрипт

}

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

if (flagStorage [. . . ] =true).

Альтернативный вариант проверки существования всех необходимых стилей - запись в массив, например, нулей

flagStorage.push("О")

с последующей проверкой длины массива. Если она не будет соответствовать количеству проверяемых стилей, значит, со стилями не все в порядке:


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