Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Назад Введение в мир программирования
Глава 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.

Литература для самообразования

  1. Кнут Д. Всё про METAFONT.: Пер. с англ. М.: Издательский дом ``Вильямс'', 2003. 384 с.
  2. 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).
  3. 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).
  4. 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).
  5. 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).
  6. 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).
  7. Van der Laan K. Graphics and TEX --- a reappraisal of METAFONT/MetaPost. URL: http://www.ntg.nl/maps/16/28.pdf (дата обращения: 02.05.2012).

Предыдущий раздел: Оглавление Следующий раздел:
Управление светодиодами клавиатуры