2012-07-25 13 views
6

Sto facendo uno strumento semplice per aiutare con i font di icone css.Come posso rilevare i caratteri definiti in un font?

Attualmente, è necessario un carattere stile wingdings specificato e lo rappresenta come appare per ogni numero unicode, affiancato con un carattere di sistema standard (arial, ad esempio) al momento in cui sto andando dai numeri unicode 33-255.

Come coloro che hanno familiarità con i caratteri e la codifica dei caratteri avranno già indovinato, molti di questi posti saranno vuoti. Ecco un esempio: enter image description here

Come si può vedere, i personaggi che sono in realtà vale la pena mostrare per questo tipo di carattere sono in minoranza, e molti personaggi di questa serie unicode non hanno nemmeno presentarsi per il font predefinito sans-serif . Questa non è roba critica, tutti i personaggi usabili sono mostrati comunque, ma per pura curiosità, mi piacerebbe sapere se c'è un modo per dire quali personaggi sono rappresentati in un font. Qualcuno conosce una soluzione?

Idealmente, una soluzione lato server è preferibile, qualsiasi lingua che ti piace. Tuttavia, qualsiasi soluzione sarebbe di valore.

Per i curiosi, il mio codice esistente è su GitHub: Font Looper

spero la presentazione flat-file non offendere nessuno troppo, sto cercando di mantenere questo magra e media.

+0

Bella idea. Buona fortuna per looper dei font. scusa non posso far altro che mi piace –

risposta

3

Credo che le informazioni che stai cercando siano nella tabella CMAP del carattere. Non sono esperto di caratteri, ma la mia comprensione è che la tabella CMAP mappa i punti unicode agli indici di glifo. Quindi, se non esiste un glifo mappato su un punto Unicode, allora si può presumere che il carattere non supporti quel carattere.

Ecco alcuni esempio di codice C# ho trovato utilizzando le librerie multimediali di WPF:

var fontFamilies = System.Windows.Media.Fonts.GetFontFamilies(@"C:\Windows\Fonts\Arial.ttf"); 

foreach (var family in fontFamilies) 
{ 
    foreach (var typeface in family.GetTypefaces()) 
    { 
     var glyph = null as System.Windows.Media.GlyphTypeface; 

     if (typeface.TryGetGlyphTypeface(out glyph)) 
     { 
      foreach (var kvp in glyph.CharacterToGlyphMap) 
      { 
       Console.WriteLine(kvp.Key.ToString() + " : " + kvp.Value.ToString()); 
      } 
     } 
    } 
} 

Non so quanto aiuto questo sarà per te, ma hai detto qualsiasi linguaggio/soluzione potrebbe essere prezioso.

Tutte queste classi sono disponibili nello System.Windows.Media namespace che fa parte dell'assemblaggio PresentationCore.dll.

+1

Questo è molto interessante, grazie. – daveyfaherty