Перед созданием нового стиля нужно убедиться, что стиль с аналогичным названием в публикации не существует, в противном случае 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("О")
с последующей проверкой длины массива. Если она не будет соответствовать количеству проверяемых стилей, значит, со стилями не все в порядке: