11

无论如何在 PostScript 中使用 unicode 字符串(很可能是 UTF-8,但可以是任何编码)?

到目前为止,我一直在使用这个函数将字体转换为 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

但我真的不喜欢它。

4

2 回答 2

6

不是真的或以任何简单的“开箱即用”方式。有关详细信息,请参阅此常见问题解答条目

于 2009-05-28T10:37:32.263 回答
2

这可能符合您的要求,也可能不符合您的要求,但我编写的解释器 ( xpost ) 使用 Cairo 的所有图形和字体功能,包括show. 因此,无论开罗必须提供什么支持,xpost 都不会妨碍您。但在您过于兴奋之前,这是一个单人项目,还没有完全提供完整的 Level-1 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);

一个绘图操作符,它从一串 UTF-8 字符生成形状,根据当前的 font_face、font_size (font_matrix) 和 font_options 呈现。

该函数首先为文本字符串计算一组字形。放置第一个字形,使其原点位于当前点。每个后续字形的原点从前一个字形的原点偏移前一个字形的提前值。

在此调用之后,当前点将移动到下一个字形将在同一进程中放置的原点。也就是说,当前点将位于最终字形偏移其提前值的原点。这允许通过多次调用 cairo_show_text() 轻松显示单个逻辑字符串。

注意:cairo_show_text() 函数调用是 cairo 设计者所称的“玩具”文本 API 的一部分。它对于简短的演示和简单的程序很方便,但对于严重的文本使用应用程序来说,它并不足够。请参阅 cairo_show_glyphs() 以了解 cairo 中的“真实”文本显示 API。

http://www.cairographics.org/manual/cairo-text.html#cairo-show-text

所以它是 Postscript 中的 UTF-8,我可以想象!:)

于 2012-09-21T04:40:30.667 回答