2008-11-06 6 views
9

Gibt es sowieso PostScript in Unicode-Strings (höchstwahrscheinlich in UTF-8, könnte aber jede Codierung sein)?Unicode in PostScript

Bisher habe ich diese Funktion unter Verwendung von Schriften in Latin1 Kodierung transformiert:

/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 

, aber ich mag es nicht wirklich.

Antwort

6

Nicht wirklich oder in irgendeiner einfachen "out of the box" Weise. Siehe this FAQ entry for details.

+0

Tks, es ist wirklich peinlich, und etwas plattorm-abhängig (zusätzlich zu Schrift abhängig); aber bis jetzt ist es der einzige Schritt in die richtige Richtung, die ich gesehen habe – Javier

2

Das mag oder kann nicht Ihre Rechnung passen, aber der Interpreter, den ich schrieb (xpost) verwendet Cairo für alle seine Grafiken und Schriftartfunktionen, einschließlich show. Was auch immer die Unterstützung von Kairo sein mag, xpost steht nicht im Weg. Aber bevor du zu aufgeregt wirst, ist es ein Ein-Mann-Projekt und bietet noch nicht das vollständige Level-1-Postscript.

Edit: Die neueste Version unterstützt dies nicht. Here ist die letzte Version, die (listing) tat.


Hier ist meine C-Code für die Show Betreiber selbst.

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); 
    } 
} 

Und von der Cairo docs:

cairo_show_text()

Leere cairo_show_text (cairo_t * cr,
const char * UTF-8);

Ein Zeichenoperator, der die Form aus einer Folge von UTF-8-Zeichen generiert, die entsprechend der aktuellen font_face, font_size (font_matrix) und font_options gerendert werden.

Diese Funktion berechnet zunächst eine Reihe von Glyphen für die Textzeichenfolge. Die erste Glyphe wird so platziert, dass ihr Ursprung am aktuellen Punkt liegt. Der Ursprung jedes nachfolgenden Glyphs ist gegenüber dem des vorherigen Glyphs um die Vorauswerte des vorherigen Glyphs versetzt.

Nach diesem Aufruf wird der aktuelle Punkt an den Ursprung verschoben, an dem das nächste Glyph in derselben Progression platziert wird. Das heißt, der aktuelle Punkt wird am Ursprung des letzten Glyphen-Offsets durch seine Vorlaufwerte liegen. Dies ermöglicht die einfache Anzeige einer einzelnen logischen Zeichenfolge mit mehreren Aufrufen von cairo_show_text().

Hinweis: Der Funktionsaufruf cairo_show_text() ist Teil dessen, was die Designer von cairo die Text-API "toy" nennen. Es ist praktisch für kurze Demos und einfache Programme, aber es wird nicht erwartet, dass es für ernsthafte Text verwendende Anwendungen geeignet ist. Siehe cairo_show_glyphs() für die "echte" Textanzeige-API in Kairo.

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

So ist es UTF-8 in Postscript, in der Nähe, wie ich herausfinden kann! :)

+0

gut, das ist schön; bedeutet aber nur, dass xpost annimmt, dass Text UTF-8 ist (eine gute Wahl!).Es hilft mir nicht, Unicode-Text in PS-Dokumenten zu verwenden, die zum Drucker gehen würden (oder in PDF destilliert werden) – Javier

+0

Ich erwartete halb so viel. :( –