Есть ли способ использовать строки Unicode (скорее всего, в UTF-8, но может быть любая кодировка) в PostScript?
До сих пор я использовал эту функцию для преобразования шрифтов в кодировку Latin1:
/latinize {
findfont
dup length dict begin
{ 1 index /FID ne {def}{pop pop} ifelse }forall
/Encoding ISOLatin1Encoding def
currentdict
end
definefont pop
}bind def
/HelveLat /Helvetica latinize
/HelveLatbold /Helvetica-Bold latinize
но мне это действительно не нравится.





Не совсем или каким-то простым "из коробки" способом. См. эта запись в FAQ для подробностей.
Это может соответствовать вашим требованиям, а может и не соответствовать, но интерпретатор, который я написал (xpost), использует Cairo для всех своих функций графики и шрифтов, включая show. Так что какую бы поддержку ни предлагал Каир, xpost не мешает. Но пока вы не слишком взволнованы, это проект одного человека, который еще не предлагает полного Postscript первого уровня.
Обновлено: новейшая версия не поддерживает это. Здесь - последняя версия, которая использовала (листинг).
Вот мой код на языке C для самого оператора шоу.
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);A drawing operator that generates the shape from a string of UTF-8 characters, rendered according to the current font_face, font_size (font_matrix), and font_options.
This function first computes a set of glyphs for the string of text. The first glyph is placed so that its origin is at the current point. The origin of each subsequent glyph is offset from that of the previous glyph by the advance values of the previous glyph.
After this call the current point is moved to the origin of where the next glyph would be placed in this same progression. That is, the current point will be at the origin of the final glyph offset by its advance values. This allows for easy display of a single logical string with multiple calls to cairo_show_text().
Note: The cairo_show_text() function call is part of what the cairo designers call the "toy" text API. It is convenient for short demos and simple programs, but it is not expected to be adequate for serious text-using applications. See cairo_show_glyphs() for the "real" text display API in cairo.
http://www.cairographics.org/manual/cairo-text.html#cairo-show-text
Так что это UTF-8 в Postscript, насколько я понимаю! :)
ну это хорошо; но это означает только то, что xpost предполагает текст в кодировке UTF-8 (хороший выбор!). Мне не помогает использовать текст Unicode в документах PS, который будет отправлен на принтер (или преобразован в PDF)
спасибо, это действительно неудобно и что-то платформенно-зависимое (помимо шрифтозависимого); но пока это единственный шаг в правильном направлении, который я видел