Мова програмування PostScript Урок 7
Про роботу з файлами
Аргументім'я_файлуповинен відповідати угодам операційної системи, в якій працює інтерпретатор. У PostScript існують певні імена файлів, такі як%stdinта%stdout.Тип_доступузадається однією з літер:
- 'r' - вхідний файл (тільки читання);
- 'w' - вихідний файл (тільки запис).
Для зручності в мові є кілька операторів читання:read,readstring,readhexstringтаreadline.
readlineчитає з файлу послідовність символів, обмежену символом кінця рядка, та зберігає їх у аргументі рядок (при цьому сам термінатор рядка туди не записується). Якщо рядок заповнений раніше, ніж зустрівся символ нового рядка, виникає помилка, яка називаєтьсяrangecheck. При успішному завершенні операції читання у стеку повертається такожtrue, інакше -false.
Так як зображення в PostScript часто кодується як масив 16-річних чисел і, якщо воно досить велике, його незручно тримати всередині програми, вважати його з файлу допоможе спеціальний оператор -readhexstring.
Він послідовно зчитує 16-річні цифри з файлу, перевіряючи їх на діапазон 0-9, A-F. Відбувається послідовне формування двох цифр одного байта і запам'ятовування їх у рядку. При цьому всі символи типу пробілів, табуляцій та повернення каретки ігноруються. Читання закінчується, коли досягається кінець файлу. Обмеження на максимальну довжину рядка накладаються операційною системою. Синтаксис як і в оператораreadline.
Такий самий синтаксис має і операторreadstring. Відreadlineвін відрізняється лише тим, що лічені символи розглядаються якцілі числа в діапазоні від 0 до 255. Особливо розглядається лише символ нового рядка.
Інформація про кількість байтів, доступних для читання у файлі, повертається операторомbytesavaiable. Якщо результат дорівнює-1, досягнуто кінець файлу.
currentfileповертає об'єкт типуfile, з якого інтерпретатор PostScript читав нещодавно.
Зазвичай стандартний файл введення повертається. Якщо не було читання з будь-якого файлу, воно проводиться з файлу програми. У цьому покажчик поточної позиції встановлюється після останнього ліченого інтерпретатором слова (оператора чи елемента даних). Ця властивість використовується для того, щоб помістити в змінний текст або малюнок, що знаходяться безпосередньо в програмі. Це показує приклад, взятий з опису оператора:
closefileрозриває зв'язок між об'єктом типуfileта відповідним йому реальним файлом.
Нарешті, серед операторів введення-виведення є ще ряд допоміжних і очевидних операторів типуstatus,flush.
Угоди щодо структури програми
де шрифт1 шрифт2 - імена PostScript-шрифтів, які у документі. Ця інформація може використовуватися деякими утилітами, які завантажують шрифти в принтер до друку документа. Допускається вказувати (atend), що означає присутність, очікування або щось таке.
задає заголовок документа. текст - рядок заголовка.
містить ім'я програміста (або програми), який породив цей текст.
число сторінок у документі (невід'ємне ціле число), або слово (atend).
координати лівого нижнього та правого верхнього кута в системі координат користувача, або слово (atend).
Коментарі тіла програми
кінець розділу прологу програми.
демітка- текст із назвою сторінки, апорядковий_номер- номер сторінки в багатосторінковому документі.
задає список шрифтів, які використовуються для поточної сторінки документа.
відзначає кінець тіла програми та початок епілогу.
Коментарі епілогу
Оператори малювання
У мові PostScript в операторах малювання важливо знати, коли точка вважається внутрішньою по відношенню до поточної траєкторії (відсікання), а коли - зовнішньої. Є два правила визначення внутрішньої точки: парний-непарний і ненульовий поворот (on-zero winding). Обидва правила ґрунтуються на підрахунку перетинів променів з точки, що перевіряється, з поточною траєкторією.
Метод ненульового поворотуполягає в наступному: з точки, що перевіряється, по всіх напрямках малюються промені, а потім аналізуються місця перетину з сегментом траєкторії. Починаючи з лічильника рівного нулю, ми додаємо до нього одиницю, якщо промінь перетинає траєкторію зліва направо, віднімаємо одиниці, якщо він перетинає її праворуч наліво. Якщо лічильник дорівнює нулю, точка зовнішня, інакше – внутрішня. Правило не визначає, що відбувається у випадку, якщо промінь проходить по дотичній або перпендикулярній до сегменту.
Правило парний-непарнийвідрізняється від попереднього тим, що підраховується просто число перетинів променем сегментів траєкторії. Якщо число парне, точка всередині області. Якщо непарне – зовнішня.
Для простих фігур результат застосування кожного із правил збігається. Відмінність проявляється на складніших постатях.
fillзаповнює поточним кольором область, обмежену поточною траєкторією, використовуючи правило ненульового повороту. Будь-який попередній вміст цієї області на поточній сторінці втрачається, тому якщо заливка проводитьсябілим кольором, то ця властивість може бути використана для очищення області.
(Зауважу, що сторінка повністю очищається за допомогою оператораerasepage, що не має аргументів, який зафарбовує її сірим кольором рівня1, не змінюючи стану графічного середовища. Цей оператор виконується також автоматично після оператора>showpage.)
Перед малюваннямfillявно закриває будь-які відкриті шляхи поточної траєкторії. Для її збереження слід використовувати послідовність операторівgsave fill grestore.
Для заливання області за правилом парний непарний використовується операторeofill. В іншому він повністю ідентичний операторуfill.
Завдання.Щоб відчути різницю між двома цими правилами, намалюйте за допомогою PostScript дві однакових п'ятикутних зірки (не прибираючи внутрішні лінії) і заповніть їх внутрішні області за допомогою операторівfillтаeofillвідповідно.
Щоб помістити графічне зображення на сторінку, використовується операторimage.
Зображення міститься у прямокутну область розміромширинанависотуточок, кожна з яких представлена значенням збіт/точкаданих (1, 2, 4 або 8 бітів на точку ). Дані зображення зчитуються як послідовність символів, причому, якщо точка кодується менше 8 бітами, дані упаковані в байтізліва направо.
Зображення на сторінці має своювласну систему координат, за початок якої (0,0) прийнято нижній лівий кут прямокутної області зображення, а верхній правий кут має координати (ширина, висота). Операндматрицязадає перетворення з простору користувача систему координат зображення.
Останнійоперанд (процедура) послідовно виконується операторомimage, щоб отримати дані зображення. Зазвичай, ці дані читаються з файлу за допомогою оператораreadhexstring.
Оператори пошуку та інші корисні оператори
anchorsearchвизначає, чи збігається початковий підрядокрядка1зрядком2. (у цьому випадкурядок1як мінімум дорівнює по довжинірядку2і відповідні символи збігаються). Якщо збігається, торядок1розбивається на дві підрядки в одну з яких міститься частина, що збіглася, а в іншу залишокрядка1.
Більш загальну форму пошуку дає операторsearch. Він дозволяє знайти перше входженнярядка2урядок1. Результат пошуку, як і уanchorsearch, повертається в стеку операндів. При цьому у вершині стека знаходиться результат операції (trueабоfalse), арядок1розбивається на 3 сегменти: частина рядка до підрядка, що збіглася (pre), підрядка, що збіглася (match) та залишок рядка (post).
reversepathзмінює напрямок поточного шляху.
pathboxповертає межі області поточного шляху;
currentpointповертає координати поточної точки.
PostScript Level 3
ТехнологіяEnhanced Image Technology (EIT)забезпечує швидший, простіший та якісніший друк документів. Головна перевага для користувача в тому, що EIT розпізнає об'єкти зображення та автоматично оптимізує їхню обробку. Введена підтримка друку тривимірних зображень, зображень з фотографічною якістю та ін.
ТехнологіяAdvanced Page Processing (APP)збільшує продуктивність системи обробки зображення. Оскільки компоненти документа стають більш складними друкувальна система будеобробляти кожну компоненту як окремий об'єкт, послідовності оптимізованої для підвищення пропускної здатності. PostScript Level 3 підтримуватиме обробку вмісту Web-вузлів, включаючи роботу з HTML- та PDF-файлами. Щоб забезпечити сумісність з основними операційними системами та скоротити час пересилання шрифтів у принтер, APP також розширено набір резидентних шрифтів. Крім того, Adobe інтегрувала в Level 3 підтримку формату PDF.
СистемаNetWorks Systemспрощує використання та керування принтером, підключеним до мережі. Принтер з цією системою має свою Web-сторінку, що базується на Web-керуванні, друк безпосередньо з Web-сторінки принтера, підтримку всіх промислових стандартів на технологію дистанційного керування та інші можливості.
ТехнологіяPlanetReady Printing, реалізована, забезпечує у принтерах із PostScript Level 3 підтримку національних мов.
Книги з PostScript фірми Adobe Systems
Літератури з PostScript не так багато. В основному це три посібники, видані (і перевидані) фірмою Adobe у видавництві Addison-Wesley Publishing.
PostScript Language Program Design. ISBN 0-201-14396-8, 256 pp., $24.95.
PostScript Language Reference Manual, Second Edition. ISBN 0-201-18127-4, 784 pp., $32.95.
PostScript Language Tutorial and Cookbook. ISBN 0-201-10179-3, 256 pp., $21.95. Її можете взяти тут.
Можливо вам виявляться корисними ще кілька книг:
Programming the Display PostScript System with NEXTSTEP. ISBN 0-201-58135-3, 416 pp. $26.95.
Programming the Display PostScript System with X. ISBN 0-201-62203-3, 624 pp. $29.95.
Adobe Type 1 Font Format. ISBN 0-201-57044-0, 114 pp., $16.95.
Portable Document Format Reference Manual: Офіційний документ для файлу формату для Adobe Acrobat. ISBN 0-201-62628-4, 240 pp., $24.95