: Листинг 5.2, Применение функций проверки'

if (!арр.selection[0].isText()) ( alert("Выделенное не текст!")

} else (

// Код обработки для текста

}

5.1. Поиск текстового фрейма и страницы

Поскольку работа с текстом - одна из наиболее эффективных сфер применения скриптинга, а текст всегда находится во фрейме, рассмотрим способы обращения к фрейму. Первым может быть someDocument.myTextFrame и, в более узком контексте, someDocument.somePage.myTextFrame. Если не стоит Задача обратиться к конкретному объекту, в цикле просматривают соответствующую коллекцию, например, myDocument. TextFrames И, таким образом, ПО-лучают доступ ко всем фреймам, входящим в нее. Но как перейти только на какой-то конкретный фрейм myTextFrame? Для этого должна быть какая-то зацепка, какая-то отличительная особенность, по которой мы бы смогли этот фрейм отделить от других таких же, находящихся на той же странице или в целом документе. Такой зацепкой может стать либо какое-то уникальное его свойство (например, цвет, ширина, наличие окантовки или еще что-то), но, как правило, на практике это слабо применимо, поскольку фрейм может вообще никак не отличаться от своих собратьев. Единственным выходом может быть его выделение курсором. Тут возможны два варианта: когда выделен непосредственно фрейм либо все или часть его содержимого. В любом из двух последних случаев для доступа к фрейму удобно использовать свойство parentTextFrames. В,принципе, разработчики могли бы использовать обозначение parentTextFrame (без окончания "s") по аналогии с parentstory, однако так сделано из-за особенностей объекта TextFrame.

Представьте ситуацию, что вы работаете с таблицей, занимающей несколько страниц- в этом случае родительским фреймом будет не один какой-то конкретный фрейм, а все, на которых эта таблица расположилась (т. е. массив фреймов). Аналогичная ситуация и с областью выделения - вы можете выбрать фрагмент текста в story неограниченной длины. Соответственно, родительских фреймов будет также несколько. Таким образом, логика в названии свойства parentTextFrames не нарушена.

В простейшем случае, если курсор стоит в тексте, коллекция parentTextFrames состоит всего из одного объекта, поэтому для получения ссылки на него достаточно использовать конструкцию

currentTextFrame = арр.activeDocument.selection[0].parentTextFrames[0]

Через нее можно легко найти номер страницы, содержащий фрейм:

currentPage = currentTextFrame.parent.name

Однако существует еще несколько вариантов определения номера. Самый простой из них вообще никак не связан с положением точки вставки в тексте, поскольку использует непосредственное обращение к странице, которая на данный момент активна (ее номер отображается в окне для перехода на страницы в нижней строке публикации). Метод заключается в использовании объекта activewindow: среди его свойств есть указатель на текущую страницу- activePage, у которого, в свою очередь, имеется свойство паше, являющееся ее номером:

curr_page = арр.activewindow.activePage.name

С одной стороны, такой подход, безусловно, проще, но с другой, всегда ли гарантирует он нужный результат? Предположим, в документе установлена низкая степень увеличения, при этом на экран будет выводиться сразу несколько страниц- в таком случае активной может быть любая, в зависимости от расположения линии их раздела на экране. Поэтому универсальным все же будет первый описанный способ. Вообще же приведенный пример является хорошей иллюстрацией того, насколько внимательно нужно пользоваться теми или иными объектами. Ведь, воспользовавшись вторым способом, мы получали бы не всегда верные данные и, в случае их использования для дальнейших преобразований, последствия такого непродуманного до конца решения могли бы быть самыми разнымн.


⇐ вернуться назад | | далее ⇒