2013-04-09 4 views
9

Da un linguaggio di scripting (Python o Ruby, dicono) su un sistema basato su Debian, mi piacerebbe trovare uno di:Come si possono trovare i codepoint di Unicode per i quali un font ha glifi, su un sistema basato su Debian?

  1. Tutto l'Unicode codepoints che un particolare tipo di carattere ha glifi per
  2. Tutto i caratteri che hanno glifi per un particolare Unicode codepoint

(ovviamente sia in forma 1 o 2 può essere derivata l'altro, in modo tutto ciò che è più facile sarebbe grande.) ho fatto in passato, eseguendo:

fc-list : file charset 

... e analizzando l'output alla fine di ogni riga, basato su this code from fontconfig ma mi sembra che ci dovrebbe essere un modo molto più semplice per farlo.

(io non sono del tutto sicuro che questo è il sito giusto per StackExchange questa domanda, ma cerco una risposta che può essere utilizzato a livello di codice.)

+0

"Ci dovrebbe essere un modo più semplice"? Sai quanti formati di font ci sono? E tu vuoi essere in grado di elaborare * tutti * di loro ?! –

+0

@Kerrek SB: So (ovviamente!) Che ci sono molti formati di font diversi, ma abbiamo delle librerie che trattano questo - per esempio, il comando fontconfig che ho dato nella domanda ti dà le informazioni che sto cercando tipi di carattere di diversi formati. –

+1

Correlati: http://stackoverflow.com/questions/4458696/finding-out-what-characters-a-font-supports – leonbloy

risposta

6

vorrei provare uno qualsiasi dei FreeType 2 language bindings. Ecco una soluzione Perl per elencare i punti di codice Unicode di un font utilizzando Font::FreeType:

use Font::FreeType; 
Font::FreeType->new->face('DejaVuSans.ttf')->foreach_char(sub { 
    printf("%04X\n", $_->char_code); 
}); 
+0

+1 Grazie, è molto utile - aspetterò un po 'prima di selezionare "accetta" nel caso ci siano altre risposte. –

+1

Qualche idea sul perché questo non sembra notare glifi allocati alle aree di utilizzo private, come gli swash alternati? – tchrist

+0

No, ma certamente non è un problema radicato nei collegamenti Perl. Da una rapida occhiata al codice sorgente di freetype2, forse ['find_unicode_charmap'] (http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/src/base/ftobjs.c#n973) sceglie la mappa di caratteri sbagliata? – nwellnhof

1

Recentemente ho elencato la mappatura da codepoints Unicode a glypths in una TTF con TTX/FontTools. Quello strumento è scritto in Python, quindi corrisponde al tag Python nel tuo post. Il comando

ttx -t cmap foo.ttf 

genererà un file XML che descrive foo.ttx che la mappatura, di vari ambienti e codifiche. Vedi per es. this reference per una descrizione di cosa significano effettivamente gli identificatori di piattaforma e codifica. Presumo che il pacchetto possa essere usato come una libreria e come strumento da riga di comando, ma non ho esperienza lì.

Problemi correlati