Шрифты. Разработка и использование
каждого символа включает его имя, ширину левого поля, ширину
символа (расстояние от линии левого поля до линии правого поля),
описания разметки и контура. В этой области всегда присутствует
неопределенный символ с именем .notdef и символ пробела с име¬
нем space.
Правила построения контуров и разметки мы обсудим ниже, а здесь
приведем пример описания символа В:
/В RD { 21 675 hsbw
96 112 vstem 512 120 vstem 0 24 hstem 384 40 hstem
672 40 hstem 688 24 hstem 712 vmoveto 6 callsubr -489 vlineto
5 callsubr 360 hlineto
192 80 84111 hvcurveto 0 103 -84 50-7224 rrcurveto 29 4 callsubr
72 27 52 49 0 74 rrcurveto 130 127 60 -181 vhcurveto closepath
-84 -40 rmoveto 80 hlineto 132 68 -56 -97 hvcurveto
-86 -72 -49 -112 vhcurveto -96 hlineto closepath
-40 vmoveto 99 hlineto 30 4 callsubr 112 0 94 -48 -1 -107 rrcurveto
-83 -66 -66 -112 vhcurveto -52 hlineto -34 0 -24 11 -16 13 rrcurveto
closepath
endchar} ND
Описание символов в формате Type 1
Для описания символов в формате Туре 1 используется специальный
язык, который так и называется — язык программирования Туре 1. Исполь¬
зуя команды этого языка (а их более 20), можно формировать символы лю¬
бой сложности, вызывать глобальные и локальные подпрограммы, произ¬
водить разметку символов и даже выполнять промежуточные вычисления.
Для экономии объема, занимаемого шрифтом, все команды языка и чис¬
ла кодируются при помощи особого алгоритма, сочетающего сравнитель¬
но высокую компактность и быстроту декодирования.
Например, следующий текст на языке Туре 1:
21 675 hsbw 0 712 rmoveto -24 vineto 10 hineto 69 27 -26 -61 hvcurveto
после кодирования будет выглядеть так:
АО F9 37 OD F9 5С 04 73 07 95 06 С6 А6 71 4Е 1F.
После кодирования описания символов еще и шифруются:
2А 40 IE А8 39 56 8Е 4D 33 80 F0 6В 33 90 А5 F9,
так что без специальных программ разобраться в них совершенно невоз¬
можно. В дальнейшем мы будем приводить примеры в исходной записи.
Команды языка Туре 1 можно разделить на несколько групп.
• Команды построения контура
rlineto, hlineto, vlineto, rmoveto, hmoveto, vmoveto, rrcurveto, vhcurveto,
hvcurveto, hsbw, sbw, seac, setcurrentpoint, closepath
- 150 -
Глава 6. Форматы цифровых шрифтов
• Команды разметки
hstem, vstem, hstem3, vstem3, dotsection
• Команды управления
callsubr, callothersubr, endchar, return
• Арифметические команды и команды управления стеком
div, pop
Описание каждого символа начинается с команд hsbw или sbw, которые
определяют величину левого поля и ширину символа. Описание символа за¬
канчивается командой endchar. Описание подпрограммы — командой retum.
Координатная система символов. Все символы в Туре 1-шрифтах
представляются в единой координатной сетке. Преобразование символов
в соответствии с координатной системой выводного устройства произво¬
дится через матрицу, заданную в заголовке шрифта (FontMatrix) (см.
рис.6.8). При этом после трансформирования через матрицу получается
шрифт кеглем в 1 пункт.
Заданный размер
Матрица
объекта
FontMatrix
Рис. 6.8. Схема преобразования символа
Матрица состоит из 6 чисел: [ab с d tx t].
Расчет итоговых координат производится следующим образом:
х' = ах + су + tx
у’ =bx + dy + t*
Обычно в Туре 1-шрифтах используется сетка в 1000 единиц (то есть
1000 единиц координатного пространства символа соответствуют 1 пунк¬
ту, а прописные буквы имеют высоту примерно 700 единиц), при этом ко¬
эффициенты матрицы and равны 0.001.
При помощи FontMatrix можно создавать наклонные (не курсивные ! ) начер¬
тания без изменения самого шрифта. Для этого коэффициенту с нужно присво¬
ить значение, равное синусу угла наклона. Например, матрица для координат¬
ной сетки 1000 с наклоном в 12° вправо будет выглядеть так: [0.0010 0.2 0.0010 0].
Коэффициенты Ь, tx и t обычно не используются в Туре 1-шрифтах.
Представление контуров символов. Как уже говорилось, в формате
Туре 1 контуры символов формируются из участков прямых линий (назо¬
вем их векторами) и участков кривых Безье третьего порядка (см. рис. 6.9).
- 151 -