Четверг, 06 Февраль 2014 20:27

Команды изображения текстов

Оцените материал
(0 голосов)

Команды изображения текстовКак уже говорилось, текстовая строка задается набором символов в круглых скобках. Показывается тектовая строка командой

show - эта команда берет из стека строку символов, объект в круглых скобках, и рисует ее левым нижним краем на позиции курсора.

Естественно позицию курсора можно изменить командой X Y m. Но нужна еще дополнительная информация о размере символов, форме их написания и т. д. Постскрипт уже относительно старый язык, и когда он создавался, то существовала только система ASCII, то есть таблицы символов размером 256. Уникоды еще не использовались. Так все и осталось.

Постскрипт шрифты (font) содержат не более 256 знаков. Более того, есть стандартный набор шрифтов, который обязаны поддерживать все принтеры и все интерпретаторы типа Gstools. И в этом стандартном наборе отсутсвует русский язык. Это большой минус, хотя конечно проблему можно решить, но приходится использовать нестандартные фонты, что увеличивает размер программы и ухудшает переносимость. Так как Постскрипт - язык векторный, то все шрифты тоже векторные, их можно масштабировать и вообще видоизменять произвольным образом.

Шрифты описываются специальным сложным образом и находятся в файлах с соответсвующими именами. В программе Gstools, которую я предлагаю на своем сайте, эти файлы находятся в папке (gs5.50/fonts). Соответствие имен файлов тем именам фонтов, которые используются в языке. Постскрипт обычно записывается в файл с именем Fontmap в папке (gs5.50). Там, однако, могут оказаться имена фонтов, которых реально нет в поставке, но которые можно скачать с сайта фирмы Adobe. Я просто перечислю здесь имена стандартных фонтов в порядке их привлекательности

/Palatino-Roman

/Palatino-Italic

/Palatino-Bold

/Palatino-BoldItalic

/Times-Roman

/Times-Italic

/Times-Bold

/Times-BoldItalic

/Helvetica

/Helvetica-Oblique

/Helvetica-Bold

/Helvetica-BoldOblique

/Helvetica-Narrow

/Helvetica-Narrow-Oblique

/Helvetica-Narrow-Bold

/Helvetica-Narrow-BoldOblique

/Symbol

/Courier

/Courier-Oblique

/Courier-Bold

/Courier-BoldOblique

/AvantGarde-Book

/AvantGarde-BookOblique

/AvantGarde-Demi

/AvantGarde-DemiOblique

/Bookman-Demi

/Bookman-DemiItalic

/Bookman-Light

/Bookman-LightItalic

ewCenturySchlbk-Roman

ewCenturySchlbk-Italic

ewCenturySchlbk-Bold

ewCenturySchlbk-BoldItalic

/ZapfDingbats

/ZapfChancery-MediumItalic

Эти имена можно смело использовать в программе, так как интерпретатор их найдет в своих арсеналах и обработает. Помимо этого существует множество шрифтов самых разных типов, которые можно купить и установить в интерпретатор. Более того, существуют конверторы true type фонтов ОС Виндовс в постскрипт фонты. Наконец каждый может сам разработать себе фонт по определенным правилам и либо установить файл в интерпретатор, либо просто записать определение фонта в Пролог файла. Именно так я сделал с русским фонтом, о чем речь пойдет в последующих главах.

Итак, для рисования текста необходимо указать какое-либо имя фонта из указанных выше и затем выполнить команду

findfont - которая заставляет интерпретатор искать нужный файл, все фонты исходно имеют размер 1 pt. Соотвественно фонт нужно промасштабировать. Это делает команда

scalefont - она берет из стека число N и масштабирует фонт на этот размер, после этого команда

setfont - устанавливает данный фонт как текущий для рисования командой show.

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

/s{show}bd

/f{findfont exch scalefont setfont}bd

/PR{/Palatino-Roman f}bd

/PB{/Palatino-Bold f}bd

/PI{/Palatino-Italic f}bd

/Sy{/Symbol f}bd

/He{/Helvetica f}bd

/L{14 PR s}bd

/B{14 PB s}bd

/I{14 PI s}bd

/G{14 Sy s}bd

/H{14 He s}bd

Все эти процедуры представляют собой последовательную цепочку сокращений. В конце концов, выбрано 5 фонтов стандартного размера 14 pt и эти фонты обозначаются всего одной буквой. Теперь, если вдруг нам захотелось написать букву m пятью разными шрифтами подряд, то это совсем просто 10 10 m (m)L(m)B(m)I(m)G(m)H. Эту программу можно выполнить, для этого надо использовать шаблон структуры EPS файла, описанный в предыдущем разделе и поставить все новые команды в Преамбулу файла, а указанную программу в основную часть. Вот я только что это проделал. Вместо 4-й буквы m стоит греческая буква мю.

Теперь нам в самый раз поговорить о том, как интерпретатор рисует тексты. Мы можем указывать в строке любые символы, которые можно набить на клавиатуре. Реально интерпретатор берет ASCII номер этого символа и рисует как раз тот символ, который у него зарезервирован под этим номером. В шрифте Symbol рисуются символы греческого языка. В шрифте могут быть также символы, номера которых вообще невозможно ввести с клавиатуры. Есть и другая проблема: как ввести символы, являющиеся служебными в языке, например, круглые скобки.

Для этого предусмотрена конструкция, которая используется во многих языках - символ можно задать по восьмеричному номеру, перед которым ставится обратная наклонная черта, например \101 = A и так далее. Использование восьмеричных номеров вместо шестнадцатиричных - это своеобразный запах старины. Когда то программы писались в двоичном коде компьютера, но вместо двоичных чисел очень популярна была именно восьмеричная система.

Понятия байта тогда не существовало. Задание символов по номеру решает все проблемы. Но кроме этого есть еще и дополнительные возможности указания непечатных символов \b=\10, \t=\11, \n=\12, \r=\15, \\=\134, \(=\50, \)=\51. Еще одно полезное правило состоит в том, что если строка длинная и не умещается на одной линии, то ее приходится переносить. При этом символ конца линии тоже запишется как символ для печати. Если нужно этого избежать, то в конце линии можно поставить знак "\" и переноса не будет.

Часто бывает необходимо поставить текст на позицию курсора не началом, а концом или серединой, причем заранее длина текста неизвестна. Для этого в языке vkPS введены следующие процедуры:

/sp{stringwidth pop}bd - определяет длину строки

/sc{dup sp -0.5 mul 0 rm s}bd - ставит текст серединой

/se{dup sp -1 mul 0 rm s}bd - ставит текст концом

/Lc{14 PR sc}bd - ставит текст стандартным фонтом на середину

/Le{14 PR se}bd - ставит текст стандартным фонтом на конец

Здесь использованы еще не известные нам команды

dup - помещает в стек копию последнего элемента

pop - вынимает из стека последний элемент, но ничего с ним не делает

stringwidth - берет из стека строку символов и вычисляет ее ширину, но возвращает в стек два числа как X,Y смещение точки из начало в конец текста, второе число ноль.

Теперь ясно как это работает. dup - копирует строку в стеке, stringwidth - съедает копию, но возвращает два числа, pop - уничтожает последнее ненужное число. После этого происходит умножение ширины на -0.5 или на -1 и смещение текущей позиции курсора на указанное расстояние. Теперь мы имеем набор команд s,sc,se позволяющих рисовать текст строго справа от линии, в центре линии и слева от линии. Для полноты картины следует указать, что есть еще более сложный оператор рисования текста

ashow - он берет из стека три объекта (text) Y X и рисует текст таким образом, что каждый следующий символ сдвигается по отношению к предыдущему на заданное смещение X,Y. Иногда это бывает полезно. Для особых случаев есть еще оператор

widthshow - аргументами которого являются четыре объекта cx cy char (text). Так они должны быть записаны перед его использованием, из стека он их берет в обратном порядке. Он рисует (text), но специальным образом - каждый символ с размерами, которые получаются добавлением к размерам символа char приращений cx и cy по горизонтали и по вертикали. Символ char задается своим ASCII кодом.

Полученных знаний вполне достаточно, чтобы приготовить рисунок любой степени сложности. Однако, если рисунок действительно сложный, кое-что получится не вполне оптимально.

Интересные статьи

Уникальные компьютеры Apple –что же чаще…

Уникальные компьютеры Apple –что же чаще всего ломается?

Техника компании Apple теперь пользуется колоссальной популярностью среди всех пользователей. Но, несмотря на огромное количество достоинств, эти удивительные компьютеры фирмы Apple могут ломаться. И ...

Чемоданный моддинг: его преимущества

Чемоданный моддинг: его преимущества

Продолжаем узнавать современные виды моддинга. Сегодня мы поговорим о том, что за интересное направление компьютерного искусства взорвало бум в Европе несколько лет назад. Это чемоданный моддинг корпу...

где заказать компьютерную помощь? . Положитесь на Ритуал Биант http://www.ritual-biant.ru/ - бюро похоронных услуг в Москве.

Banner sidebar

Вопрос дня

Какая из мобильных ОС лучше?

Популярные статьи

Простой рендеринг нескольких о…

Простой рендеринг нескольких окон без аппаратного ускорения

Изначальный способ 2D-рендеринга, который скрывается под наложением окон на экране дисплея, прост и прямолинеен. Нам нужно знать два параметра: первый...

Пять причин, почему виртуально…

Пять причин, почему виртуальное казино Фараон пользуется популярностью

Сейчас любители азарта уже оценили все преимущества онлайн казино. Игровые площадки отлично удерживают свои позиции, предлагая пользователям великолеп...