Это может соответствовать или не соответствовать вашему счету, но написанный мной интерпретатор ( xpost ) использует Cairo для всех своих функций графики и шрифтов, включая show
. Так что, какую бы поддержку Каир ни предлагал, xpost не мешает. Но прежде чем вы будете слишком взволнованы, это проект для одного человека, и он пока не предлагает полноценный PostScript уровня 1.
Редактировать: новейшая версия не поддерживает это. Здесь - последняя версия ( список ).
Вот мой код C для самого оператора show.
OPFN_ void show(state *st, object s) {
char str[s.u.c.n+1];
memcpy(str, STR(s), s.u.c.n); str[s.u.c.n] = '\0';
//printf("showing (%s)\n", str);
if (st->cr) {
cairo_show_text(st->cr, str);
cairo_surface_flush(st->surface);
XFlush(st->dis);
}
}
И из Каирских документов :
cairo_show_text ()
void cairo_show_text (cairo_t * cr,
const char * utf8);
Оператор рисования, который генерирует фигуру из строки символов UTF-8, отображаемой в соответствии с текущими font_face, font_size (font_matrix) и font_options.
Эта функция сначала вычисляет набор глифов для строки текста. Первый глиф размещается так, чтобы его источник находился в текущей точке. Источник каждого последующего глифа смещен от исходного предыдущего глифа на значения предварительного значения предыдущего глифа.
После этого вызова текущая точка перемещается в начало координат, где следующий глиф будет размещен в этой же прогрессии. Таким образом, текущая точка будет в источнике окончательного смещения глифа его предварительными значениями. Это позволяет легко отображать одну логическую строку с несколькими вызовами cairo_show_text ().
Примечание. Вызов функции cairo_show_text () является частью того, что дизайнеры cairo называют «игрушечным» текстовым API. Это удобно для коротких демонстраций и простых программ, но не ожидается, что оно подойдет для серьезных текстовых приложений. См. Cairo_show_glyphs () для "реального" API отображения текста в cairo.
http://www.cairographics.org/manual/cairo-text.html#cairo-show-text
Так что это UTF-8 в Postscript, насколько я могу понять! :)