Юникод в постскриптуме - PullRequest
       21

Юникод в постскриптуме

9 голосов
/ 07 ноября 2008

Есть ли в любом случае использовать строки 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

но мне действительно это не нравится.

Ответы [ 2 ]

6 голосов
/ 28 мая 2009

Не совсем или каким-либо простым способом «из коробки». См. эту запись FAQ для деталей .

2 голосов
/ 21 сентября 2012

Это может соответствовать или не соответствовать вашему счету, но написанный мной интерпретатор ( 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, насколько я могу понять! :)

...