Четверг, 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 кодом.

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

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

Хобби: радиоэлектронщик-радиолюбитель.

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

На каком языке пишут игры?

На каком языке пишут игры?

Примерно 45% читателей интересовались выбором языка программирования и сопутствующих технологий для создания сайта или интернет магазина и 50% — для создания игр. Остальные вопросы касались конкретных...

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

Banner sidebar

Вопрос дня

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

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

Что делать, если компьютер не …

Что делать, если компьютер не видит второй монитор?

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

Операционные системы для ПК: M…

Операционные системы для ПК: MAC OS X имеет пару ответов для вас

Может ли операционная система Mac OS X успешно работать на других устройствах, кроме Apple?Был заключен специальный договор между Apple и Macintosh, в...