mySelection = app.selection[0] myStory = mySelection.parentStory
И поскольку нас интересует его содержимое, то:
myStoryContents = myStory.contents
Затем получаем блок текста от самого начала текста до точки вставки, для чего используем JavaScript-функцию substring!). У нее два параметра- ин дексы начального и конечного элементов. Как получить индекс места, где стоит курсор, мы уже рассматривали ранее. Соответственно получаем:
mySelection.parentstory.contents.substring(0, mySelection[0].index)
Разбиваем строку на абзацы. Метод split о имеет единственный параметр - символ, по которому будет разделяться строка (в нашем случае строкой будет весь текст - от начала и до точки вставки). Символ нового абзаца имеет обозначение ' \ г':
mySelection.parentStory.contents.substring(О, mySelection.index).split('\r')
Последний шаг- определяем длину получившегося массива. С учетом того, что нам нужно определить индекс текущего абзаца, из полученного значения нам следует вычесть I. В конечном счете получаем:
currentParagraphlndex = mySelection.parentStory.contents.substring(0, mySelection.index).split('\r').length - 1
Таким образом, индекс абзаца можно получить всего одной строчкой. Соответственно обращение к предыдущему абзацу будет иметь вид:
previousParagraph = mySelection.paragraphs[currentParagraphlndex-l], а к десятому перед ним
nextParagraph = mySelection.paragraphs[currentParagraphIndex+10]
И т. д.
5.3. Добавление текста
Для доступа к содержимому текста (не важно, при какой именно операции - добавление, удаление, создание текста) используют свойство фрейма
contents.
Рассмотрим листинг 5.3.
Листинг 5.3. Добавление фрейма с текстом
if(арр.documents.length==0) арр. documents. add () ; myDocument = app.documents[0] firstPage = myDocument.pages[0] with (firstPage)(
textFrames. add ({geometricBounds: Array (0, 0, "10 mrn","10 mm"), contents: "Hello, world!"});
with(textFrames[0]){ if (overflows) {
fit(fitOptions.FrameToContent)
}
}
}
Сначала создаем на первой странице текстовый фрейм при помощи уже известной конструкции add ({}). InDesign ExtendScript позволяет в момент создания нового объекта задать его свойства. В данном случае устанавливаем габаритные размеры фрейма (они определяются двумя точками - левой верхней и правой нижней; соответственно, их нужно передать в виде массива) и заодно вписываем в него наш текст (параметры разделяются запятыми, а назначаются через двоеточие). Габариты указаны в текущих значениях (которые выставлены в InDesign 110 умолчанию для всех создаваемых документов). Для задания точных значений можно в начале скрипта их переопределить, но в данном случае будет проще указать их в явном виде - "10 mm".
Поскольку мы не знаем параметров стиля по умолчанию, существует вероятность того, что текст полностью разместиться в текстовом фрейме заданных нами размеров не сможет. Поэтому последним шагом мы проверяем свойство переполнения фрейма (overflows) и, если так оно и есть, используем очень удобный метод увеличения размеров контейнера по размерам его содержимого fit (fitOptions.FrameToContent) (аналогичный метод существует и у изображений).