2012-07-25 10 views
6

Estoy haciendo una herramienta simple para ayudar con las fuentes del icono css.¿Cómo puedo detectar los caracteres definidos en una fuente?

Actualmente, se necesita una fuente tipo wingdings específica, y la representa como aparece para cada número Unicode, lado a lado con una fuente de sistema estándar (arial, por ejemplo) en el momento en que voy de unicode números 33-255.

Como ya habrán adivinado los familiarizados con las fuentes y la codificación de caracteres, muchos de estos lugares estarán vacíos. He aquí un ejemplo: enter image description here

Como se puede ver, los personajes que son realmente vale la pena mostrar para esta fuente son una minoría, y muchos personajes de esta gama Unicode ni siquiera se presentan a la fuente predeterminada de sans serif . Esto no es algo crítico, todos los personajes usables se muestran de todos modos, pero puramente por curiosidad, me encantaría saber si hay una manera de decir qué personajes están representados en una fuente. ¿Alguien sabe una solución?

Idealmente, se prefiere una solución de servidor, cualquier idioma que desee. Sin embargo, cualquier solución sería valiosa.

Para los curiosos, mi código existente tenga en github: Font Looper

espero que la presentación de archivo plano no ofende a nadie demasiado, yo estoy tratando de mantener éste clara y directa.

+0

Buena idea. Buena suerte para el looper de la fuente. lo siento, no puedo ayudar pero me gusta –

Respuesta

3

Creo que la información que está buscando está en la tabla CMAP de la fuente. No soy experto en fuentes, pero tengo entendido que la tabla CMAP asigna puntos Unicode a índices de glifos. Entonces, si no hay un glifo mapeado en un punto Unicode, entonces se puede suponer que la fuente no admite ese carácter.

He aquí algunos ejemplos de código C# encontré usando las bibliotecas de medios de 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()); 
      } 
     } 
    } 
} 

No sabe cuánta ayuda esto será para usted, pero usted lo dijo cualquier idioma/solución sería valiosa.

Todas estas clases se pueden encontrar en el System.Windows.Media namespace que forma parte del ensamblaje PresentationCore.dll.

+1

Esto es muy interesante, gracias. – daveyfaherty

Cuestiones relacionadas