4 СТИЛЯ - body_text, headingl, heading2 И heading3. В принципе, расширить их число не представляет никакой проблемы: предлагаемый скрипт служит только для иллюстрации общего подхода к решению задачи, а конкретная реализация не составит никакого труда.
Принцип конвертирования таков: сначала формируем таблицу соответствий, определяющую, какому стилю из публикации соответствует определенный стиль в HTML-документе- именно ее нужно наращивать используемыми стилями до требуемых возможностей. Затем просматриваем содержание каждого материала публикации и определяем, каким стилем отформатирован каждый абзац.
В зависимости от присвоенного стиля добавляем в начало и конец каждого абзаца HTML-документа открывающий и закрывающий теги.
Если попадается таблица, ее также оформляем соответствующими тегами разметки (table, tr, td).
Начинаем (листинг 4.23). Шаг первый - создаем таблицу соответствий в виде двумерного массива, каждый элемент которого представляет собой отдельный массив с парой значений: название стиля, используемого в публикации, и соответствующий ему стиль в HTML. Такой подход позволит нам в цикле просматривать правила переформатирования, и в случае, если найден любой из первых элементов, заменять на второй.
Листинг 4.23. Экспорт в HTML
myStyleToTagMapping = new Array; myStyleToTagMapping.push(["body_text", "p"]); myStyleToTagMapping.push(["headingl", "hi"]); myStyleToTagMapping.push(["heading2", "h2"]); myStyleToTagMapping.push(["heading3", "h3"]);
// Выводим диалоговое окно, в котором пользователь указывает,
// куда файлы будут экспортированы if(app.documents.length!=0){
if(app.documents[0].stories.length != 0
var myTextFile = File.saveDialog("Save HTML As", undefined) if(myTextFile != null){ // Открываем файл с доступом для записи
myTextFile.open("w");
// Начинаем просматривать содержимое каждого материала публикации for(var i = 0; i <арр.documents[0].stories.length; i ++){ myStory = app.documents[0].stories[i];
// Переходим к абзацам
forfvar j = 0; j<myStory.paragraphs.length; j ++){ myParagraph = myStory.paragraphs[j];
11 С таблицами - отдельный разговор.
// Пока рассматриваем только текст if(myParagraph.tables.length == 0)(
// Проверяем наличие локального форматирования if(myParagraph.textStyleRanges.length == 1){
// Если оно существует, определяем соответствующую // HTML-разметку. Если полужирный, то Bold и т. п. myTag = myFindTag(myParagraph.appliedParagraphStyle.name, ’Ь myStyleToTagMapping);
// Если данному стилю в публикации не поставлен // в соответствие ни один HTML-стиль, выводим абзац // как простой текст, if(myTag == "")
{myTag = "р";}
// Иначе задаем оформление для открывающего // и закрывающего тегов myStartTag = "<" + myTag + myEndTag = "</" + myTag +
// Если абзац в материале не последний, нужно удалять //из него символ абзаца - в таком случае мы получим // только чистый текст, без ненужной разметки