Библиотека сайта rus-linux.net
Назад | Введение в мир программирования Глава 3. Представление информации с помощью чисел |
Программирование глифов и шрифтов
Для графического представления символов, составляющих текст, применяются глифы
(glyphs).
Важно учитывать, что одной графеме (например, букве ``А'' кириллического алфавита) может
соответствовать несколько глифов разного стиля, остающихся похожими на графему (букву ``А'').
Бывают также случаи, когда одному и тому же глифу соответствует несколько различных графем
(к графемам данного типа относятся буква ``B'' латинского алфавита и выглядящая таким
же образом буква кириллицы). Набор глифов образует шрифт.
Стандарты, в рамках которых обобщены и уточнены подходы к созданию и использованию глифов и шрифтов, распространяются междунароной организацией ISO (International Organization for Standardization) за деньги. Речь идёт, например, о ISO/IEC 9541 Information technology --- Font information interchange (Информационная технология --- Обмен информацией о шрифте), состоящем из четырёх частей: Архитектура (Architecture), Формат обмена (Interchange format), Представление формы глифа (Glyph shape representation), Согласование открытого формата шрифта (Harmonization to Open Font Format).
По формату файлов, в которых они хранятся, шрифты можно разделить на несколько групп: векторные (vector fonts, outline fonts), растровые (bitmap fonts) и штриховые шрифты (stroke-based fonts). Интересные комментарии относительно штриховых шрифтов см. в архиве рассылки проекта FreeType.
Одним из инструментов для создания растровых шрифтов является язык программирования METAFONT
.
В системах GNU/Linux программа для преобразования исходного кода на METAFONT
в файлы шрифта
обычно носит название mf
. На выходе у METAFONT
, помимо вспомогательной информации,
генерируется файл в формате GF
(generic font, шрифт общего формата), представляющий из себя битовый шаблон
глифа (подробнее см. публикацию ``Generic Font File Format'' в рамках проекта TUGboat).
Читатели, интересующиеся китайским языком, могут обратить внимание на
проект шрифта под названием ``Красная буква''
(hong2 zi4): http://hongzi.sourceforge.net/ (его исходый код неплохо структурирован и
без проблем компилируется средствами прилагаемого к нему скрипта, что делает данный шрифт привлекательным
в качестве отправной точки в экспериментах с METAFONT
).
Техника определения китайских иероглифов c помощью METAFONT
подробно
обсуждается в статье ``A Chinese Meta-Font'', авторами которой
являются Джон Хобби (John Hobby) и Гу Гоань (Gu Guoan).
METAFONT
рисует глифы в двумерной системе координат.
Пользователь задаёт количество единичных отрезков, по оси абсцисс (горизонтальная ось x
)
и ординат (вертикальная ось y
), на которые METAFONT
должен отступить от
точки отсчёта (reference point). Таким образом, можно сказать, что программирование
на языке METAFONT
сводится к управлению положением и цветом точек на воображаемой
бумаге в клеточку.
В наши задачи не входит подробное описание приёмов работы с METAFONT
(для этих целей лучше всего обратиться к материалам книги [Кнут2003] и
статье ``METAFONT for Beginners'', автором которой является Джеффри Тобин).
Приведём пример простой программы, генерирующей изображение буквы ``Г''
.
Создайте файл с именем mf-eg1.mf
и запишите туда следующие строки.
pickup pencircle xscaled 0.5pt yscaled 0.3pt; % выбираем перо для рисования с неровными краями draw(10,10)..(10,100); % рисуем букву ``Г'' по координатам. draw(10,100)..(50,100); shipit; % инициируем запись изображения буквы % в файл шрифта в формате generic font end. % завершаем работу программы
После выполнения команды mf mf-eg1
в текущем каталоге появится сразу
несколько новых файлов, один из которых называется mf-eg1.2602gf
. Преобразуем
его в формат DVI (Device Independent), позволяющий посмотреть, что за буква у нас получилась.
gftodvi mf-eg1.2602gf
На выходе получаем файл mf-eg1.dvi
, который можно вывести на экране в
виде изображения с помощью таких программ как xdvi
или evince
.
Буквы, содержащие округлые формы легко строятся
если использовать кривые Безье (подробнее см. [Кнут2003, с. 25-31]).
К примеру, глиф, похожий на строчную букву ``a''
можно получить
подав на вход mf
файл, содержащий следующий исходный код.
pickup pencircle xscaled 0.5pt yscaled 0.3pt; % выбираем перо для рисования с неровными краями % Переменные z1, z2, z3, z4, z5 вводятся для того, чтобы % код было проще модернизировать и усложнять, осуществляя математические % операции над координатами. top z1 = (30,10); % Лексема top указывает на необходимость разместить именно % в точке (30,10) именно верхний край пера, а не нижний (bot), правый (rt) % или левый (lft). top z2 = (10,100); top z3 = (50,100); top z4 = (50,100); top z5 = (50,10); draw z1..z2..z3; draw z4..z5; showit; % выводим изображение получившегося глифа на экран
Часто ли METAFONT применяется для создания шрифтов? Не очень. Шрифты относительно редко программируются. Вероятно, основной причиной этому является некоторая отстранённость большинства практикующих художников и дизайнеров от компьютерных наук. Такие инструменты как FontForge подходят для создания шрифтов методом, похожим на WYSIWYG (What You See Is What You Get; What You See Is All You Get).
Обычно METAFONT
используется в связке с TeX (LaTeX)
и
METAPOST (язык для решения практических задач,
связанных с оформлением текста; подробнее см. http://tug.org/metapost.html). Графику в системе
вёрстки TeX (LaTeX)
также можно создавать на языках PGF и Tikz.
Итак, теперь мы знаем, что шрифты можно не только рисовать в редакторах,
похожих на FontForge
, но и программировать средствами языка METAFONT
.
Литература для самообразования
- Кнут Д. Всё про METAFONT.: Пер. с англ. М.: Издательский дом ``Вильямс'', 2003. 384 с.
- Beebe N. H. F. 25 Years of TEX and METAFONT: Looking Back and Looking Forward: TUG'2003 Keynote Address. URL: http://www.math.utah.edu/~beebe/talks/2003/tug2003/beebe.pdf (дата обращения: 02.05.2012).
- Dürst M. J., Yergeau F., Ishida R., Wolf M., Texin T. Character Model for the World Wide Web 1.0: Fundamentals. URL: http://www.w3.org/TR/charmod/ (дата обращения: 04.02.2012).
- Hobby J. D. and the MetaPost development team. METAPOST: A User's Manual. Documented version: 1.212. URL: http://www.tug.org/docs/metapost/mpman.pdf (дата обращения: 29.04.2012).
- Hobby J., Guoan G. A Chinese Meta-Font. TUGboat, Volume 5 (1984), No. 2. URL: http://www.tug.org/TUGboat/tb05-2/tb10hobby.pdf (дата обращения: 02.05.2012).
- Lin R. How to Create Your Own Symbols in METAFONT and for use in LaTeX Documents. URL: http://tex.loria.fr/fontes/MF.ps.gz (дата обращения: 29.04.2012).
- Van der Laan K. Graphics and TEX --- a reappraisal of METAFONT/MetaPost. URL: http://www.ntg.nl/maps/16/28.pdf (дата обращения: 02.05.2012).
Предыдущий раздел: | Оглавление | Следующий раздел: |
Управление светодиодами клавиатуры |