Поручите выполнение рутинных операций AppleScript
Решите маленькую издательскую загадку: что является одновременно простым и сложным, дружественным и пугающим, важным, но редко используемым? Всего несколько лет назад ответом на эту загадку мог бы быть «стиль абзаца» — элемент оформления публикаций, который не пользовался особой популярностью даже у самых опытных дизайнеров. Конечно, в наше время большинство дизайнеров уже не представляют свою работу без стилей абзацев и даже полюбили их.
Зато сценарий — последовательность команд, которая заставляет приложение выполнить какую-либо операцию — превратился в мощный, но редко используемый инструмент автоматизации производственного процесса. Хотя многие дизайнеры полагают, что написание сценариев — это привилегия специалистов-«технарей», в действительности создать сценарий не труднее, чем выбрать шрифт, задать для контура печать без выворотки или использовать стиль абзаца. Однако потенциальный выигрыш от применения сценария может быть ошеломляющим. Сценарии позволяют настолько значительно повысить производительность труда, что в этом с ними не может соперничать ни один инструмент в области издательских технологий.
В настоящее время для издательских целей чаще всего используется язык написания сценариев AppleScript, разработанный компанией Apple только для платформы Macintosh, поэтому автор сосредоточится именно на этом языке. Писать сценарии на языке AppleScript легче, он более понятен, чем другие аналоги; за него не нужно платить; и, если у вас установлена операционная система Macintosh System 7.5 и выше, то вы уже располагаете поддержкой AppleScript. Разработчики сценариев для Windows обычно используют язык Visual Basic (см. врезку «Сценарии для Windows»).
Сценарии против макросов
У читателей может возникнуть вопрос — зачем вообще изучать языки описания сценариев, когда существуют более простые альтернативы, такие как последовательности действий и макросы. В последовательностях действий (actions), поддержка которых реализована в таких программах, как Adobe Photoshop и Adobe Illustrator, а также макропрограммах, из последовательностей нажатий клавиш, создаваемых при помощи специальных утилит типа QuicKeys компании CE Software, записываются воздействия пользователя на элементы интерфейса — щелчки мышью, перетаскивания значков и нажатия клавиш, при помощи которых можно выполнить повторяющиеся операции. Сценарии, которые являются значительно более гибкими и мощными инструментами, чем макросы или последовательности действий, работают с внутренними элементами программ и поэтому не ограничены действиями, связанными с элементами пользовательского интерфейса. Сценарии могут также производить вычисления («Переместить этот объект на расстояние 6 пик от левой границы»), оценивать состояние рабочего окружения в ходе их выполнения («Это левая или правая страница?»), принимать основанные на результатах предыдущих операций решения («Разве я сказал “левая” граница? Я имел в виду “правую”») и соответственно действовать («Изменить название файла и сохранить его»).
Несмотря на ограниченные возможности утилит для создания клавиатурных макросов, они могут выступать в роли отличных «помощников» для AppleScript (см. врезку «Инструменты для AppleScript»).
Как работает AppleScript
AppleScript использует события (events) Apple — которые передают информацию, команды и запросы между приложениями, Mac OS и сетями — для пересылки сценариев из одного приложения (обычно Script Editor или откомпилированного сценария) расширению-обработчику AppleScript, расположенному в папке System. Это расширение преобразует сценарий в последовательность событий Apple и пересылает их заданному приложению (target application). Кроме того, расширение получает информацию (под названием «результат») от приложения и передает ее источнику сценария.
Поддержка сценариев в приложениях
Сценарии просто незаменимы при использовании в паре с мощным приложением. Большинство основных издательских программ в той или иной степени поддерживают AppleScript.
- Пакет QuarkXPress, который поддерживал AppleScript, начиная с версии 3.32, оснащен наиболее мощными возможностями работы со сценариями из всех издательских приложений. XPress поддерживает модель объектов AppleScript, а большинство объектов публикации могут взаимодействовать с командами сценария. Хотя в версии 4.0 поддержка сценариев в XPress была значительно расширена, большинство новых функций XPress могут программироваться в сценариях лишь с версии 4.04. Простые сценарии, написанные для ранних версий программы, скорее всего будут выполняться в XPress 4.x, а более сложные — нет. (Изменения и отличия описаны в тексте http://www.quark.com/quarkxpress/qxpfix_8.html.)
- В Adobe PageMaker имеется собственный язык написания сценариев, однако AppleScript можно использовать для пересылки в PageMaker сценарных команд (действий) и запросов (запросов на информацию) при помощи команд do script и evaluate языка AppleScript. PageMaker не поддерживает модель объектов AppleScript, но сочетание собственных сценариев PageMaker и AppleScript является мощным инструментом решения издательских задач.
- CorelDraw 8 обладает широкими возможностями использования сценариев, которые позволяют автоматизировать практически любое действие программы. Кроме того, пользователь может записывать и воспроизводить сценарии прямо из CorelDraw 8. Есть одно ограничение: вместо модели объектов AppleScript здесь используются команды, которые имитируют собственный пользовательский интерфейс приложения.
- В пакете Macromedia FreeHand версий 7 и 8 поддержка AppleScript ограничена в основном теми функциями программы, которые ориентированы на пакетную обработку, такими как экспорт файлов и операции поиска и замены.
- В Illustrator 8 поддержка AppleScript ограничена выполнением последовательностей действий.
- В Photoshop можно запрограммировать сценарии для выполнения последовательности действий, но дополнительный модуль PhotoScripter компании Main Event (см. врезку «Инструменты для AppleScript»), значительно расширяет поддержку AppleScript в Photoshop.
- Пакет Adobe InDesign по поддержке AppleScript во многом близок к QuarkXPress, а иногда и превосходит его. Сценарии можно писать и для Windows-версий InDesign, но уже с помощью языка Visual Basic, чего лишен XPress.
Ваш первый сценарий
При первом ознакомлении терминология сценариев может показаться пугающей, но в действительности ее несложно освоить. Изучив этот «жаргон» (см. врезку «Словарь сценариев»), можно браться за написание сценария, который позволяет делать что-то реальное.
Представьте себе, что вы составляете информационный бюллетень со списком вакансий для большого университета. Каждый день начинается с того, что вы запускаете программу верстки и вводите новую дату в заголовок бюллетеня. Ежедневный процесс ввода даты постепенно подводит вас все ближе и ближе к нервному срыву.
Однако AppleScript можно использовать для автоматического ввода даты в публикацию QuarkXPress. Хотя данный сценарий может показаться мало применимым для практической работы, в нем демонстрируются четыре основные технологии: открытие нового документа, создание текстового бокса, добавление текста к текстовому боксу и форматирование введенного текста.
Запустите Script Editor (если он не установлен на жестком диске вашего компьютера, найдите его на дисках с установочной версией операционной системы), и введите исходный текст AppleScript сценария 1
СЦЕНАРИЙ 1
set myDate to the date string of the (current date) tell application "QuarkXPressTM 4.04" set myDocument to make document at beginning tell myDocument tell page 1 set myTextBox to make text box at beginning tell myTextBox set bounds to {"3p0", "3p0", "5p0", "48p0"} tell story 1 set contents to "University Employment Newsletter for " & myDate set font to "Times" set style to italic set size to 18 set justification to centered end tell end tell end tell end tell end tell
РИСУНОК 1. После запуска сценария открытия нового документа с текстовым боксом, содержащим дату создания файла, на экране появится следующее изображение. |
Можно написать версию сценария, выполняющего такую же операцию в PageMaker. Но поскольку в PageMaker имеется собственный язык сценариев, контролировать это приложение с помощью AppleScript может быть несколько сложнее. Чтобы вызывать команды PageMaker, их следует посылать в виде текстовых строк командами do script (как это показано в сценарии 2). И в PageMaker, и в AppleScript для выделения строк используются кавычки. Но из-за того, что некоторые команды PageMaker сами используют строки (и, следовательно, содержат кавычки), перед любым символом кавычек в сценарии PageMaker, который обработчик AppleScript может ошибочно интерпретировать как окончание строки, следует ставить обратный слэш.
СЦЕНАРИЙ 2
set myDate to the date string of the (current date) tell application "Adobe® PageMaker® 6.5" do script "new newstorysized 3p0, 3p0, 48p0, 5p0 textenter \"University Employment Newsletter for \" textenter \"" & myDate & "\" selectall size 18 font \"Times\" typestyle italic alignment center" activate end tell
Запись и отладка
РИСУНОК 2. В Script Editor можно просматривать словарь AppleScript для определенного приложения (такого как QuarkXPress). На рисунке приводятся свойства объекта текстового бокса. |
РИСУНОК 3. Окна Event Log программы Script Editor — это лучший способ отладки сценариев. |
Сценарии, экономящие время
Одним из недостатков XPress является его неспособность автоматически подгонять размер бокса под точный размер вставленного в него изображения. Расширение Place, разработанное David (продается через Jintek), может изменять размеры бокса в точном соответствии с размерами импортированной в него графики (в момент импорта). А что делать, если вы имеете дело с файлом, содержащим десятки изображений, которые уже импортированы? Сценарий 3 — это пример решения такой задачи.
СЦЕНАРИЙ 3
tell application "QuarkXPressTM 4.04" tell document 1 --Выборка текущих предпочтений для единиц измерения. set myOldYMeasure to vertical measure set myOldXMeasure to horizontal measure --Установка единиц измерения в пунктах --(для арифметических расчетов так удобнее). set vertical measure to points set horizontal measure to points set myBox to current box --Выборка положения изображения. set myImageBounds to bounds of image 1 of myBox set myOffset to offset of image 1 of myBox as list --Расчет ширины и высоты изображения. set myHeight to (item 4 of myImageBounds) - (item 2 of myImageBounds) set myWidth to (item 3 of myImageBounds) - (item 1 of myImageBounds) tell myBox --Выборка толщины линии, если она задана, для компенсации. set myStrokeWidth to get width of frame as real --Выборка границ бокса. set myFrameBounds to get bounds as list --Конвертирование строк с единицами измерения --XPress (например, "82 pt") в числа. set myFrameY1 to get item 1 of myFrameBounds as real set myFrameX1 to get item 2 of myFrameBounds as real set myYOffset to get item 1 of myOffset as real set myXOffset to get item 2 of myOffset as real --Пора сделать небольшие арифметические расчеты. set myFrameY1 to myFrameY1 + myYOffset - myStrokeWidth set myFrameX1 to myFrameX1 + myXOffset - myStrokeWidth set myFrameY2 to get myFrameY1 + myHeight + (myStrokeWidth * 2) set myFrameX2 to get myFrameX1 + myWidth + (myStrokeWidth * 2) --Теперь границы бокса будут заданы таким образом, --чтобы они совпали с границами изображения. set bounds to {myFrameY1, myFrameX1, myFrameY2, myFrameX2} end tell --Компенсация возможного начального смещения изображения внутри бокса. set offset of image 1 of myBox to {0, 0} --Сброс единиц измерения в те значения, --которые были заданы первоначально. set vertical measure to myOldYMeasure set horizontal measure to myOldXMeasure end tell activate end tell
В сценарии 4 пакету FreeHand посылаются команды открыть все файлы FreeHand в выбранной папке, а затем сохранить и экспортировать их в формат EPS в папку «EPS to go!» на рабочем столе. Этот сценарий посылает команды двум приложениям — FreeHand и Finder.
СЦЕНАРИЙ 4
tell application "Finder" --Выборка выделенной папки. set myFolder to folder 1 in selection tell myFolder --Выборка списка файлов папки. set myFileList to get files whose file type is "AGD3" set myNumberOfFiles to count items in myFileList end tell --Создание новой папки на рабочем столе (если ее еще нет). tell desktop if not (exists (folder "EPS to go!")) then make new folder with properties {name:"EPS to go!"} end if end tell set myPath to folder "EPS to go!" in desktop as string --Обработка файлов согласно списку. repeat with myCounter from 1 to myNumberOfFiles set myFile to item myCounter of myFileList set myFileName to name of myFile set myFilePath to myPath & myFileName & ".eps" as string tell application "FreeHand 8" open myFile save in file myFilePath as MacEPS without SelectedOnly and IncludeFHDocInEPS close end tell end repeat end tell
Не бойтесь писать сценарии
Потратив несколько часов на написание сценариев, автоматизирующих рутинные издательские задачи, которые выполняются ежедневно, вы можете сэкономить для себя немало времени и нервов — и, вероятно, денег. Написание сценариев — это способ повысить производительность своего труда и выгадать дополнительное время для творческой работы. У вас есть выбор — ожидать, пока разработчики приложений выпустят готовые инструменты, для решения стоящих перед вами специфических задач, либо уже сегодня создать собственные средства, которые будут делать все, что нужно.
Автор сделал свой выбор. Как изучение любого другого языка, освоение AppleScript не обошлось без трудностей, но впоследствии все они были с лихвой компенсированы сэкономленным временем и повышенной продуктивностью. Чего же вы ждете?
Олаф Мартин Кверн — иллюстратор, графический дизайнер, программист и писатель. Он является автором книги Real World FreeHand (Peachpit Press, 1998 г.).
Сценарии для Windows |
На платформе Windows написание и выполнение сценариев (automation — автоматизация) являются прерогативами языков Visual Basic for Applications (VBA) и Visual Basic. VBA обычно входит в комплект приложений, таких как Microsoft Office или Visio; Visual Basic является самостоятельным языком с собственной средой разработки. (Самая недорогая версия, Learning Edition, стоит 50 долл.) Эти языки являются исключительно мощными инструментами, позволяющими строить приложения с меню, окнами и окнами диалога. Сценарии или программы, написанные на Visual Basic и взаимодействующие с приложениями с помощью канала DDE (Dynamic Data Exchange — динамический обмен данными), работают значительно быстрее, чем сценарии AppleScript. Но все ли так просто? Лишь очень немногие издательские приложения для Windows поддерживают сценарии. Среди упомянутых программ только PageMaker может взаимодействовать с программами на Visual Basic для выполнения практических задач. Однако обновленные версии издательских программ и совершенно новые приложения для Windows, которые должны выйти уже в этом году, вскоре могут нагнать (как минимум) своих «родственников» на платформе Macintosh в области поддержки средств автоматизации. |
Словарь сценариев |
Первым шагом на пути к освоению процесса написания сценариев является изучение специальной терминологии. Ниже дается трактовка наиболее употребительных слов, составляющих «жаргон» сценариев. Values (величины) — это данные (в основном, числа и текст), которые используются сценарием. Текстовые значения часто называются strings (строками). Variables (переменные) — это контейнеры для значений. Хотя вы можете использовать постоянные значения, переменные позволяют расширить диапазон применения сценариев. Objects (объекты) — это элементы приложений, с которыми можно взаимодействовать из сценария. Один объект может существовать внутри другого; например, объект «документ XPress» содержит страничные объекты, которые, в свою очередь, содержат объекты «текстовые боксы» и «боксы изображений». Object properties (свойства объектов) — это атрибуты объектов, такие как размер страницы, границы полосы и параметры колонок в документе XPress. Object model (модель объекта) описывает иерархию объектов внутри объектов приложения. Например, текст в XPress может включать абзацы, которые состоят из линий, состоящих из слова, а слова — из букв. Object references (ссылки объекта) сообщают обработчику AppleScript, какие объекты должны обрабатываться командами сценария. Ссылкой объекта может быть строка «the third paragraph of text frame 1» (третий абзац текстового фрейма 1) или «image box 1 of spread 2 of document 4» (бокс изображения 1 разворота 2 документа 4). Commands (команды) обозначают действия. С помощью команд можно создавать или удалять объекты, или изменять их свойства. Типичные команды AppleScript: get (получение значения от программы); make (создание нового объекта); set (присвоение значения переменной); count (подсчитывает количество объектов). Application dictionary (словарь приложения) содержит все объекты приложения, свойства объектов и команды, на которые отзываются объекты. Conditional statements (условные операторы) позволяют обработчику AppleScript рассчитывать условия и принимать решения, основанные на результатах расчета. Если в строке исходного текста AppleScript есть слово if — это условный оператор. Loops (циклы) повторяют последовательность команд сценария. Особенно удобны циклы для автоматизации повторяющихся определенное количество раз задач. В AppleScript имеется несколько различных типов циклов, но во всех этих командах имеется слово repeat. Comments (комментарии) игнорируются обработчиком AppleScript, но позволяют вводить замечания в исходные тексты сценариев. Чтобы ввести комментарий, наберите два дефиса (--) слева от текста. Комментарии нужны для того, чтобы напомнить, что делает тот или иной сценарий, либо его фрагмент. Кроме того они облегчают понимание другими людьми логики работы сценария. |
Инструменты для AppleScript | ||||
Оценив потенциал AppleScript как средства экономии времени, которые можно направить на решение каких-то творческих задач, вы, вероятно, захотите перейти от Script Editor к более мощной инструментальной среде написания сценариев. Scripter 2 (компании Main Event Software, http://www.mainevent.com) и Script Debugger 1.0.5 (компании Late Night Software, http://www.latenights.com) — отличные редакторы сценариев AppleScript, обе программы позволяют отслеживать выполнение сценариев. Кроме того эти редакторы лучше, чем Script Editor отображают словари приложений — Scripter обладает хорошей системой построения ссылок объектов из записей словаря; Script Debugger может отображать модели объектов приложения в виде блочной диаграммы (рис. 4). Допустим, вы захотели добавить в сценарий элементы пользовательского интерфейса. Обработчик AppleScript может отображать простые окна диалога, но тем, кому нужны более мощные возможности, следует присмотреться к FaceSpan 3.0 — приложению для построения пользовательского интерфейса на основе AppleScript (компании Digital Technology, http://www.facespan.com). С помощью RealBasic (компании Real Software, http://www.realsoftware.com), программной среды, напоминающей Visual Basic, можно также добавлять сценарии к созданным в RealBasic программам.
Выходить из приложения для того, чтобы запускать сценарии из редактора сценариев или утилиты Finder (для откомпилированных сценариев), неудобно. К счастью, при наличии QuicKeys 4.0 (компании CE Software, http://www.cesoft.com) выполнять сценарии можно нажатиями комбинаций клавиш. При помощи бесплатной утилиты OSA Menu («легкая» версия программы помещена на инсталляционный диск операционной системы Mac OS 8.5 CD, а более полную версию можно загрузить с узла http://www.lazerware.com) сценарии можно установить и вызывать через универсальное меню. PhotoScripter (также разработанный Main Event) — это дополнительный модуль к пакету Photoshop, который расширяет возможности программы полномасштабной моделью объектов AppleScript. Серьезным «сценаристам», работающим с XPress, будет полезен модуль ScriptMaster XT (компании Jintek, http://www.jintek.com) — программная оболочка для сценариев, которая работает в самом XPress и создает плавающую палитру для запуска сценариев без необходимости покидать основное приложение. Кроме того ScriptMaster XT расширяет возможности XPress средствами AppleScript (рис. 5). При помощи PreFab Player 1.5 (компании PreFab Software, http://www.prefab.com) — расширения для работы со сценариями, которое средствами AppleScript обеспечивает доступ к пользовательскому интерфейсу практически любой программы — ко многим приложениям можно добавить функции AppleScript. Вам нужна дополнительная информация об AppleScript и примеры готовых сценариев? Начать лучше всего с http://www.apple.com/applescript — официальной «базы» технологии AppleScript. А на узле http://www.applescript.com можно найти множество ссылок, связанных с AppleScript. Много полезной информации по сценариям в PageMaker размещено в PageMaker Scripting Center по адресу http://www.svprint.com/pmscripting.html. Компания Tecsoft (http://www.tecsoft.com) предлагает множество видов услуг, включая разработку и консультации по AppleScript, учебные курсы по AppleScript и различные «сценарно-ориентированные» расширения QuarkXPress. |