Любая коллекция объектов InDesign является по своему внутреннему строению массивом JavaScript. К каждому элементу массива можно обращаться несколькими способами. Самый распространенный- по порядковому номеру (или индексу), задавая его в квадратных скобках. Счет ведется с 0:
array [0] -Самый первый элемент, array [array, length-1] - последний.
Кроме использования порядковой (абсолютной) нумерации, предусмотрена относительная, при которой можно полностью отказаться от указания конкретного индекса объекта, достаточно сказать: "Открыть предыдущую дверь" или "Закрыть следующую за предыдущей", что во многих случаях оказывается даже более эффективно. Естественно, при этом предполагается, что базовый объект должен быть в любом случае определен. Используется, как правило, только в тех случаях, когда получение индекса по каким-либо причинам затруднено. Наиболее яркий пример - работа на уровне абзацев (они - понятие абстрактное, вычисляются исключительно по признаку конца строки), далее об этом пойдет речь подробнее.
Еще один вариант обращения к объекту- по имени (array[”My First"]), которое по понятным причинам должно быть уникальным. Второй способ используется достаточно редко, т. к. предварительно придется задать имя объекта, что не всегда оправдано, хотя в некоторых случаях является единственным выходом.
Имя коллекции всегда указывается во множественном числе (в конце - "s") с той целью, чтобы лишний раз подчеркнуть, что речь идет о множестве (массиве) объектов, а не о каком-то конкретном объекте, например, paragraphs. Указание порядкового номера объекта в коллекции дает ссылку на конкретный объект, который, в полном согласии с логикой, используется уже в единственном числе (paragraph)- именно так информацию, касающуюся абзацев, нужно искать в Руководстве по скриптингу.
Знание объектной модели InDesign - фундаментальное требование для написания скриптов, без нее можно уподобиться мартышке из известной басни, у которой было множество очков, но она не знала, что с ними делать. Точно так же, не зная причинно-следственных связей, вы не сможете сделать и шага, поскольку InDesign будет вежливо, но настойчиво информировать, что у него не получается включить дверь или выключить окно.
Поскольку объектное дерево InDesign очень развесистое, на рис. 2.1 дано лишь самое общее представление о нем. Толстая рамка означает коллекцию объектов, тонкая - конкретный представитель коллекции (для краткости показан лишь наиболее часто используемый объект- textFrame). Далее, в соответствующих главах будут подробнее рассматриваться коллекции, наиболее востребованные в скриптинге. Разобравшись с ними, вам не составит никакого труда использовать остальные объекты.
Рисунок не отображает взаимосвязей на более низких уровнях - например, таблица может содержать вложенную таблицу, группа иметь подгруппы, текстовый фрейм может включать заякоренный фрейм, в котором, в свою очередь, может быть текст, таблица, изображение - глубина вложенности не ограничена.
На вершине иерархической лестницы, как и следовало ожидать, расположен объект Application- это сам InDesign. Да, не удивляйтесь- коль скоро мы используем объектную модель, само приложение также становится объектом. Application (будем использовать более краткий вариант- арр) является родителем для всех остальных объектов: открытых в нем документов, стилей, цветов, диалогов, книг, библиотек, а также массы различных предустановок (Preferences, Options, Settings, Presets, Defaults). БОЛЬШИНСТВО объек-тов-предустановок не могут быть изменены, а другие, такие как changePreferences (объект, в котором собраны все установки по поиску/замене), открыты для пользователя.