if(myParagraph.characters[-1].contents = "\r"){ myString =
myParagraph.texts.itemByRange(myParagraph.characters[0], 'b myParagraph.characters[-2]).contents;
}else{
myString = myParagraph.contents;
}
}
}
Разберем подробнее метод itemByRange о. Он имеет два параметра, задающие диапазон объектов, к которым InDesign обращается через свои внутренние механизмы. Такой подход гораздо эффективнее в плане производительности (с ним может сравниться только написание не скрипта, а полноценного плагин-модуля, но это требует значительно больших знаний). Анализ производительности обоими методами (перебор средствами JavaScript и InDesign) дает убедительный результат: в среднем скорость выполнения форматирования поднялась на порядок, что является прекрасным результатом и отлично подходит для работы фактически с любым количеством объектов.
Метод itemByRange () существует в подавляющем большинстве объектов, за что разработчикам InDesign нужно сказать отдельное спасибо. Среди них - работа со строками, колонками, символами, абзацами, таблицами, ячейками, рядами. Поскольку, как уже говорилось, в таком случае InDesign задействует внутренний механизм, никакого дискомфорта даже в случае обработки значительных фрагментов нет, особенно это ощущается при работе с таблицами на уровне ячеек.
// Каждый HTML-абзац должен быть обрамлен открывающим //и закрывающим тегами
myTextFile.writeln(myStartTag + myString + myEndTag);
// Если используется множественное локальное форматирование,
// чтобы его не потерять, устанавливаем для каждого стиля // соответствующую ему разметку }else{
for(j = 0; j < myParagraph.textStyleRanges.length; j ++){ myTextStyleRange = myParagraph.textStyleRanges[j];
// Аналогично выделяем из абзаца только текст,
// удаляя знаки абзаца
if(myTextStyleRange.characters[~l]=="\r"){ myString =
myTextStyleRange.texts.itemByRange(4> myTextStyleRange.characters[1], 4> myTextStyleRange.characters[-2]).contents;
}else{
myString = myTextStyleRange.contents;
)
// Оформляем HTML-тегами фрагменты текста, набранные // полужирным, курсивом и смешанным начертаниями switch(myTextStyleRange.fontStyle){
case "Bold": myString = "<b>" + myString + "</b>" break;
case "Italic": myString = "<i>" + myString + "</i>" break;
case "Bold Italic": myString = "<bxi>" + myString + "</ix/b>" break;
)
// Записываем конечный результат myTextFile.write(myString);}
// Добавляем к нему символ новой строки myTextFile.write("\r");}
// Если встретилась таблица, обрабатываем и ее }else{
шуТаЫе = myParagraph. tables [0] ;
// Чтобы таблица была заметна, задаем ей рамку myTextFile.writeln("<table border = 1>");
// Обрабатываем построчно for (myRowCounter = 0; 'b
myRowCounter < myTable. rows. length; myRowCounter ++) { myTextFile.writeln("<tr>") ;
// И каждую колонку отдельно for (myColumnCounter = 0;
myColumnCounter cmyTable.columns.length; 4> myColumnCounter++){