Семь уроков по PostScript




Семь уроков по PostScript


    Предисловие
    Предисловие Когда-то у меня было желание написать книгу, посвященную языкам описания страниц (PDL). Начал я с языка PostScript, как наиболее важного интересного в этой группе. Так в журнале PC Mag...
    Занятие первое
    Эдуард Пройдаков Занятие первое Есть два подхода к описанию языка PostScript: как к обычному языку программирования и как к языку описания страниц. В статье использован, в основном, первый подход,...
    Основные понятия
    Основные понятия Одной из причин, вызвавшей появление и расцвет языка PostScript является необходимость выводить текст и изображения на растровые внешние устройства : матричные, струйные и лазерны...
    Система координат.
    Система координат. Позиция элемента на странице описывается парой координат х,у. Каждое выходное устройство имеет встроенную систему координат, с помощью которой адресуются точки на странице. Эту...
    Набор символов
    Набор символов Все виды скобок (круглые, квадратные, фигурные, угловые) и знак процента являются для PostScript специальными знаками. Остальные символы -- подмножество кода ASCII используются в пр...
    Стек.
    Стек. PostScript резервирует для обрабатываемых данных часть памяти именуемую стеком. Данные, помещаемые в стек, извлекаются из него в обратном порядке, т. е. последнее записанное туда число удаля...
    Постфиксная нотация
    Постфиксная нотация (обратная польская запись). Операции над данными в PostScript требуют, чтобы их операнды сначала были помещены в стек. Такой стиль программирования, при котором операнды задают...
    Типы данных.
    Типы данных. Как и другие распространенные языки программирования PostScript поддерживает различные типы данных, включая integer, real, boolean, массивы и строки. В нём определяются также объекты...
    О гибкости языка.
    О гибкости языка. Несмотря на большое количество встроенных операторов в PostScript нет зарезервированных слов. Любое слово переопределяемо. Программа в PostScript может рассматриваться как данные...
    Переносимость программ.
    Переносимость программ. Программы на PostScript записываются с использованием только печатаемых символов кода ASCII, что позволяет обращаться с ними, как с обычными файлами, т. е. не возникает ник...
    Стек и арифметические операции
    Стек и арифметические операции Элементы данных в языке PostScript называются объектами (числа, массивы, строки, символы). Над объектами можно производить различные действия, но если в других языка...
    Занесение чисел в стек.
    Занесение чисел в стек. Любое число, появившееся в исходном файле PostScript-программы заносится в стек. Например, строка -8 10.4 +77... Интерпретатор по мере ее чтения слева направо выполнит след...
    Арифметические операторы
    Арифметические операторы Оператор в PostScript - это слово, заставляющее интерпретатор выполнять те или иные действия. Он эквивалентен командам или процедурам в других языках программирования. Ког...
    Операторы add и sub.
    Операторы add и sub. Операторы смотрят находятся ли в стеке их операнды. В общем случае оператор удаляет их из стека и помещает туда результат выполнения своих действий. Например, оператор add (сл...
    Действия над стеком.
    Действия над стеком. Эта группа операторов, представителем которой был exch добавляет, удаляет и изменяет порядок следования элементов в стеке....
    clear
    clear а1 а2 clear - очистка стека - удаляет из стека все элементы 11 6 17 clear - -...
    count
    count a1...an count a1...an n число элементов в стеке...
    dup
    dup a1 dup a1 a1 дублирует в стеке его верхний элемент 8 dup - 8 8...
    pop
    pop a1 pop - удаляет из стека его верхний элемент 31 4 pop - 31...
    roll
    roll вращает элементы стека, из стека извлекаются два числа. Верхнее говорит сколько раз и в каком направлении вращать элементы стека, второе - сколько элементов вращать. 7 8 9 3 1 roll - 9 7 8 7...
    copy
    copy a1...an n copy a1...an a1...an дублирует n верхних элементов стеков Существует еще ряд более специального вида операторов, работающих со стеком, они будут рассмотрены по мере изложения. Ряд п...
    Начала графики
    Начала графики Язык PostScript был разработан для получения графических изображений, для этого у него имеется большой набор операторов. Рисование в PostScript начинается с конструирования пути на...
    Занятие второе
    Занятие второе Перед тем как продолжить рассмотрение основ языка, замечу, что для отладки программ на PostScript удобно использовать программу RIP, хотя она и работает под DOS. Так как в разных мо...
    Процедуры и переменные
    Процедуры и переменные Словарь (dictionary) - это таблица, которая связывает между собой пары объектов. Например, словарь терминов по мультимедиа связывает слова с их толкованиями. PostScript-слов...
    Переменные.
    Переменные. Чтобы определить переменную в PostScript, ее имя и значение нужно занести в текущий словарь. Это делается с помощью оператора def, как в следующем примере: /ed 47 def Косая черта перед...
    Процедуры.
    Процедуры. Процедура в PostScript - это набор операторов сгруппированных под общим именем. Имя процедуры является ключом в словаре, а набор операторов ассоциируется как его значение. Когда имя про...
    Работа со шрифтами
    Работа со шрифтами Язык PostScript не был бы так популярен, если бы он не предоставлял богатейшие возможности вывода на печать текстов. Текстовые данные представлены в PostScript объектами типа st...
    PostScript-шрифты
    PostScript-шрифты Шрифт - это набор символов, имеющих единый дизайн. Дизайн конкретного шрифта называется гарнитурой . Набор гарнитур, разработанных для совместного использования, называется семей...
    Графика и текст
    Графика и текст В PostScript не существует различия между графикой и текстом. Символ текста рассматривается как один из графических объектов, размещаемых на текущей странице. Поэтому для совмещени...
    Поворот осей
    Поворот осей Оператор rotate позволяет повернуть систему координат на заданный угол. Он берет из стека число, показывающее угол поворота осей в градусах (угол отсчитывается от вертикальной оси про...
    Изменение шкал по осям координат
    Изменение шкал по осям координат Оператор scale позволяет изменить размер единицы измерения по каждой из осей координат. Он берет из стека два аргумента - коэффициенты изменения масштаба по осям x...
    Сохранение состояния графики PostScript
    Сохранение состояния графики PostScript До сих пор мы работали с графикой явным образом, меняя с помощью операторов ее состояние. Состояние графики - это набор данных, которые описывают, как опера...
    Кривые
    Кривые Для построения реального изображения одних отрезков прямых линий явно недостаточно. Поэтому в PostScript для построения нужных кривых, окружностей и дуг окружностей имеется ряд операторов....
    Сглаживание углов
    Сглаживание углов Пересекающиеся линии часто бывает необходимо соединить плавной кривой. В PostScript для этого существует удобный оператор arcto. В качестве операндов ему в стеке задаются координ...
    Условные переходы
    У словные переходы Введем понятие выполняемого массива. Это более формальное название объекта, который ранее был назван процедурой. Какая разница для PostScript между строками 12 5 sub и { 12 5 su...
    Оператор if
    Оператор if Прежде чем рассмотреть этот популярный во всех процедурных языках оператор, посмотрим, как записываются операции сравнения чисел. В PostScript, напоминаю, операторы сравнения следуют з...
    Логические операторы: not and or и xor.
    Логические операторы: not and or и xor. Результат операции сравнения или логической операции -- логическое значение true или false. Оператор if берет из стека логический объект и выполняемый масси...
    Оператор ifelse
    Оператор ifelse Позволяет выбрать в зависимости от условия выполнение одной или другой последовательности операторов. Его формат: условие {op.1} {op2} ifelse Если результат выполнения условия true...
    У попа была собака
    У попа была собака Эта фраза замечательна тем, что мы с детства получаем представление о рекурсии. PostScript поддерживает рекурсивный вызов процедур, т. е. когда процедура вызывает сама себя. Кла...
    Занятие четвёртое
    Занятие четвёртое Начиная весной эту серию уроков у меня было сомнение -- хватит ли материала на семь занятий. Задав в Интернет поиск по ключевому слову PostScript и получив сообщение, что найдено...
    Циклы
    Циклы В языке PostScript имеется три основных конструкции циклов: простой цикл, индексируемый цикл и условный цикл. Простой цикл неявным образом уже использовался в примерах предыдущего занятия. О...
    Задание.
    Задание. Нарисуйте последовательность из N вложенных кругов, квадратов, эллипсов. Индексируемый цикл напоминает широко известную по Бейсику конструкцию for... to... next. Оператор for берет из сте...
    Задание.
    Задание. Нарисуйте пунктирную линию. Вторая важная особенность for в том, что его операнды не обязательно должны быть целыми числами. Вот пример использования этого для возможной модификации шрифт...
    Массивы
    Массивы PostScript работает с одномерными массивами - (векторами), которые определяются как набор объектов ( возможно разного типа), заключенный в квадратные скобки. Так [ (PC Magazine) 1991 54] и...
    Операторы length, put, get и forall
    Операторы length, put, get и forall работают как с массивами, так и со строками и словарем. Так length -- возвращает длину строки, массива или число пар ключ--значение в словаре. Еще два оператора...
    Еще раз о шрифтах
    Еще раз о шрифтах Для печати текста часто требуются различные операции по выравниванию слов по границам страницы, выравниванию промежутков между буквами (кернинг), чтобы напечатанный текст выгляде...
    Кодирование шрифта
    Кодирование шрифта Каждый словарь шрифта содержит описание символов в соответствии с некоторой кодовой таблицей, в частности это может быть ASCII. Таким образом каждый символ имеет свой цифровой к...
    Занятие пятое
    Занятие пятое До сих пор мы обходились без указания на различия в версиях различных языка PostScript, но сейчас это необходимо сделать. Начнём с небольшого экскурса в историю языка. Итак язык Post...
    languagelevel
    languagelevel – определение поддерживаемого уровня языка. Синтаксис: -- languagelevel уровень Уровень – это целое число, обозначающее уровень языка PostScript, поддерживаемый интерпретатором. Если...
    version
    version -- возвращает строку, которая идентифицирует используемую версию интерпретатора языка PostScript. Эта идентификация не включает информацию о возможностях языка, аппаратных средствах или оп...
    product
    product -- возвращает объект типа строки только для чтения, содержащую название продукта, в котором исполняется интерпретатор языка PostScript. Синтаксис: -- product строка...
    revision
    revision -- возвращает целое число, обозначающее текущий уровень продукта, в котором исполняется интерпретатор PostScript. Каждый продукт имеет собственную систему нумерации релизов, независящую о...
    print
    print -- записывает символы строки в стандартный файл вывода. Оператор print предоставляет простое средство для пересылки текста приложению или пользователю. Этот оператор не рисует символы на тек...
    ceiling
    ceiling -- возвращает ближайшее целое число, большее или равное операнду из вершины стека. Тип результата совпадает с типом операнда. Синтаксис: число1 ceiling число2 Примеры. -1.9 ceiling -1.0 5....
    round
    round -- возвращает целое число, ближайшее к ее операнду. Если аргумент дробная часть аргумента равна 0,5 (т. е. он одинаково удалён от соседних целых чисел), то возвращается большее целое число....
    truncate
    truncate – возвращает целую часть своего операнда. Синтаксис: число1 truncate число2 Примеры. 1.9 truncate 1.0 -3.4 truncate -3.0 BR...
    floor
    floor -- возвращает наибольшее целое число меньшее или равное операнду. Синтаксис: число1 floor число2 Примеры. 1.9 floor 1.0 -3.7 floor -4.0 BR...
    cvi
    cvi – берёт из стека число типа integer, real или строку и конвертирует его в целое число. У чисел типа real отбрасывается дробная часть, но, если это число больше максимально представимого в виде...
    cvlit
    cvlit -- конвертирует объект из вершины стека операндов из исполняемой формы в литерал. Синтаксис: оператор cvlit литерал...
    cvr
    cvr -- работает аналогично cvi, только результат преобразования – число типа real. Синтаксис: число1 cvr real строка cvi real...
    cvs –
    cvs – конвертирование в строку. Создаёт текстовое представление произвольного объекта что-либо , записывает его в строку (стирая то, что было в строке ранее) и возвращает подстроку. Если объект чи...
    cvrs
    cvrs – конвертирование в строку в заданной системе счисления. Работает как cvs, но при конвертировании результат записывается в заданной системе счисления. Если она десятичная, то ничем не отличае...
    cvn
    cvn – конвертирует строку операнда в имя объекта, совпадающее с ней лексически. Имя объекта исполняемо. строка cvn имя Пример. Синтаксис: (abc) cvn /abc...
    cvx
    cvx – конвертирование в исполняемую форму. Делает литеральный объект что-либо из вершины стека операндов исполняемым. Возможность выполнить динамически создаваемую процедуру. Синтаксис: что-либо c...
    xor –
    xor – если оба операнда логические величины, то в стеке возвращается результат операции “исключающее ИЛИ”, если операнды – типа integer, в стек помещается результат поразрядной операции xor над их...
    bitshift
    bitshift -- логический сдвиг числа. Сдвигает двоичное представление целого числа integer1 влево на shift разрядов, если shift положительно, или вправо, если отрицательно. Возвращает результат inte...
    rand
    rand – помещает в стек случайное целое число типа integer в диапазоне от 0 до 231-1, полученное с помощью генератора псевдо-случайных чисел. Синтаксис: -- rand int...
    rrand
    rrand -- возвращает целое число, представляющее текущее состояние генератора случайных чисел, используемого оператором rand. Оно может быть затем использовано в качестве операнда оператора srand,...
    realtime
    realtime -- возвращает отсчет таймера, считающего реальное время независимо от интерпретатора PostScript. Минимальный интервал отсчитываемого времени равен одной миллисекунде, начальное значение и...
    usertime
    usertime – возвращает значения интервального таймера, который увеличивается на 1 за каждую миллисекунду работы интерпретатора PostScript. Это значение никак не связано с календарным временем. При...
    Контуры символов
    Контуры символов Напомню, что по способу представления в компьютере шрифты делятся на векторные и растровые . Каждый словарь шрифта в PostScript содержит описание вида входящих в данный шрифт симв...
    Траектория отсечения
    Траектория отсечения В графическом состоянии PostScript имеется траектория отсечения (clipping path), представляющая собой границы области на текущей странице, в которой изображения могут быть нар...
    Урок шестой
    Урок шестой Начать это занятие, наверное, нужно с извинений. В тексте предыдущего урока (см. №12/1996) по техническим причинам во всех строчках с описанием синтаксиса операторов PostScript вместо...
    Встраивание PostScript-программ в документы
    Встраивание PostScript-программ в документы Так как в России наиболее широко для издательской подготовки текстов и даже для вёрстки используется Word для Windows, то следующей вопрос, который треб...
    Ещё о типах данных
    Ещё о типах данных Все данные, доступные PostScript-программам, существуют в виде объектов. Объекты делятся на простые , не имеющие внутренней структуры, и сложные (или составные). К последним отн...
    Операторы для работы со словарями
    Операторы для работы со словарями Создать пустой словарь ёмкостью N элементов можно с помощью оператора dict. Его синтаксис: число_элементов dict словарь Этот пустой словарь помещается в стек опер...
    Объекты типа operator
    Объекты типа operator Этот несколько необычный для языков программирования тип объектов в PostScript означает одно из встроенных в язык действий, вызываемое при исполнении объекта. Операторы имеют...
    Атрибуты объекта
    Атрибуты объекта Каждый объект либо литерал (literal), либо исполняемый (executable). Это важно для интерпретатора при исполнении PostScript-программы. Отметим, что при такие операторы, как [ и ]...
    Виртуальная память
    Виртуальная память Виртуальной памятью (обозначается VM) называется область памяти, в которой хранятся значения составных объектов. В некоторых реализациях PostScript может сохранять VM в файле в...
    Цветовые модели в PostScript
    Цветовые модели в PostScript В языке поддерживаются две цветовые модели: HSB (тон-насыщенность-яркость) и RGB (красный-зеленый-голубой). В каждой из этих моделей можно задать любой цвет с помощью...
    Выборка произвольного элемента из стека
    Выборка произвольного элемента из стека Оператор index удаляет неотрицательное целое число n из стека операндов, отсчитывает n-й элемент от вершины стека и помещает копию этого элемента в стек. Эт...
    Ещё о работе с отсечениями
    Ещё о работе с отсечениями Операторы clip и clippath мы рассмотрели на прошлом занятии. Теперь несколько углубим эту важную тему. Оператор eoclip находит пересечение внутри текущей траектории отсе...
    О работе с файлами
    О работе с файлами Отмечу, что здесь по сравнению с другими языками нет почти ничего нового. В PostScript файл определяется как конечная последовательность символов, заканчивающаяся маркером конец...
    Соглашения по структуре программы
    Соглашения по структуре программы Язык PostScript не определяет общую структуру PostScript-программы, однако существуют некоторые соглашения, облегчающие её структуризацию. Для записи информации о...
    Заголовочные комментарии
    Заголовочные комментарии Некоторые из этих комментариев могут помещаться в конце программы по усмотрению программиста или приложения, генерирующего PostScript-файл. %%DocumentFonts: шрифт1 шрифт2...
    Комментарии тела программы
    Комментарии тела программы %%EndProlog конец секции пролога программы. %%Page: метка порядковый_номер где метка – текст с названием страницы, а порядковый_номер – номер страницы в многостраничном...
    Комментарии эпилога
    Комментарии эпилога Эта секция состоит из комментариев типа %%DocumentFonts, %%Pages и %%BoundingBox....
    Операторы рисования
    Операторы рисования В языке PostScript в операторах рисования важно знать когда точка считается внутренней по отношению к текущей траектории (отсечению), а когда – внешней. Есть два правила опреде...
    Оператор fill
    Оператор fill заполняет текущим цветом область, ограниченную текущей траекторией используя правило ненулевого поворота. Любое предыдущее содержимое этой области на текущей странице теряется, поэто...
    Задание
    Задание . Чтобы почувствовать разницу между двумя этими правилами, нарисуйте с помощью PostScript две одинаковых пятиугольных звезды (не убирая внутренние линии) и заполните их внутренние области...
    Оператор anchorsearch
    Оператор anchorsearch определяет, совпадает ли начальная подстрока строки1 со строкой2 . (в этом случае строка1 как минимум равна по длине строке2 и соответствующие символы совпадают). Если совпад...
    PostScript Level 3
    PostScript Level 3 11 сентября 1996 г. фирма Adobe Systems объявила о выходе следующего уровня языка PostScript. В PostScript Level 3, по заявлению фирмы, улучшена производительность, функциональн...
    Книги по PostScript фирмы Adobe Systems
    Книги по PostScript фирмы Adobe Systems Литературы по PostScript не так уж много. В основном это три руководства, изданных (и переиздаваемые) фирмой Adobe в издательстве Addison-Wesley Publishing....
    Вместо заключения
    Вместо заключения На этом заканчивается наш вводный курс в язык PostScript. Мы почти полностью прошли PostScript Level 1 и чуть-чуть коснулись L2. Как всегда, в конце работы видно, что её нужно бы...








Начало    



Книжный магазин