2008-11-06 6 views
9

¿Hay alguna forma de usar cadenas unicode (probablemente en UTF-8, pero podría ser cualquier codificación) en PostScript?unicode en postscript

Hasta ahora, he estado utilizando esta función para fuentes transforma a Latin1 codificación:

/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 

pero realmente no les gusta.

Respuesta

6

No es realmente ni de ninguna manera sencilla "lista para usar". Ver this FAQ entry for details.

+0

tks, es realmente incómodo, y algo dependiente de plaftorm (además de fuente-dependiente); pero hasta ahora es el único paso en la dirección correcta que he visto – Javier

2

Esto puede o no ajustarse a su factura, pero el intérprete que escribí (xpost) usa Cairo para todos sus gráficos y funciones de fuente, incluyendo show. Entonces, cualquier soporte que El Cairo tenga para ofrecer, xpost no se interpone en el camino. Pero antes de que te emociones demasiado, es un proyecto de un solo hombre, y aún no ofrece Full Postscript de nivel 1.

Editar: La última versión no es compatible con esto. Here es la última versión que lo hizo (listing).


Aquí está mi código C para el operador del espectáculo.

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

Y desde el Cairo docs:

cairo_show_text()

vacío cairo_show_text (cairo_t * cr,
const char * UTF-8);

Operador de dibujo que genera la forma a partir de una cadena de caracteres UTF-8, representada de acuerdo con la fuente actual_face, font_size (font_matrix) y font_options.

Esta función primero calcula un conjunto de glifos para la cadena de texto. El primer glifo se coloca de modo que su origen se encuentre en el punto actual. El origen de cada glifo posterior se compensa con el del glifo anterior por los valores de avance del glifo anterior.

Después de esta llamada, el punto actual se mueve al origen de donde se colocará el siguiente glifo en esta misma progresión. Es decir, el punto actual estará en el origen del glifo final compensado por sus valores avanzados. Esto permite una visualización sencilla de una única cadena lógica con múltiples llamadas a cairo_show_text().

Nota: La llamada a la función cairo_show_text() es parte de lo que los diseñadores de cairo llaman la API de texto "de juguete". Es conveniente para demostraciones breves y programas simples, pero no se espera que sea adecuado para aplicaciones de uso de texto serio. Ver cairo_show_glyphs() para la API de visualización de texto "real" en cairo.

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

Así que es UTF-8 en PostScript, lo que puedo imaginar! :)

+0

, eso es bueno; pero solo significa que xpost asume que el texto es UTF-8 (¡una buena elección!).No me ayuda a usar el texto Unicode en documentos PS que irían a la impresora (o se destilarán en PDF) – Javier

+0

Me esperaba a medias. :( –