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

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

но мне это очень не нравится.


person Javier    schedule 06.11.2008    source источник


Ответы (2)


Не совсем или каким-то простым способом «из коробки». Подробности см. в этой записи часто задаваемых вопросов.

person Aaron Digulla    schedule 28.05.2009
comment
tks, это действительно неудобно и что-то зависит от платформы (помимо шрифта); но пока это единственный шаг в правильном направлении, который я видел - person Javier; 28.05.2009

Это может соответствовать или не соответствовать вашим требованиям, но интерпретатор, который я написал (xpost), использует Cairo. для всех своих графических и шрифтовых функций, включая show. Так что какую бы поддержку Cairo ни предлагал, xpost не мешает. Но прежде чем вы слишком воодушевитесь, это проект одного человека, и он еще не предлагает полный постскриптум 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);
    }
}

И из документов Каира:

каир_шоу_текст ()

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, насколько я понимаю! :)

person luser droog    schedule 21.09.2012
comment
хорошо, это хорошо; но это означает только то, что xpost предполагает, что текст имеет кодировку UTF-8 (хороший выбор!). Мне не помогает использовать текст Unicode в документах PS, которые отправляются на принтер (или перегоняются в PDF) - person Javier; 22.09.2012