2012-07-25 14 views
6

css icon fontlarına yardımcı olacak basit bir araç hazırlıyorum.Yazı Tipinde Tanımlanan Karakterleri Nasıl Algılayabilirim?

Şu anda, belirtilen bir kanat kanatları stili yazı tipini alır ve her unicode numarasında göründüğü haliyle, standart bir sistem yazı tipiyle (örneğin, arial) yan yana geldiğimde onu temsil ediyorum. unicode numaraları 33-255.

Yazı tipleriyle ve karakter kodlamasına aşina olanlar önceden tahmin edeceğinden, bu yerlerin çoğu boş olacaktır. İşte bir örnek: enter image description here

Gördüğünüz gibi, aslında bu yazı için gösterilmesi değer karakterler azınlıktadır ve bu unicode aralığında birçok karakter bile varsayılan sans-serif yazı tipi için görünmüyor . Bu kritik bir şey değil, tüm kullanılabilir karakterler zaten gösteriliyor, ama tamamen meraktan yoksun, bir yazı tipinde hangi karakterlerin temsil edildiğini anlamanın bir yolu olup olmadığını bilmek isterim. Bir çözüm bilen var mı?

İdeal olarak, sunucu tarafı bir çözüm tercih edilir, dilediğiniz bir dildir. Ancak, herhangi bir çözüm, değerli olurdu.

merak için

, benim mevcut kod github kalmıştır:

Font Looper ben bu yalın tutmak ve ortalama çalışıyorum, düz dosya sunumu çok fazla kimseye hakaret etmez umarım.

+0

Güzel fikir. Yazı tipi looper için iyi şanslar. Üzgünüm ama yardım edemiyorum ama beğeniyorum –

cevap

3

Aradığınız bilginin yazı tipinin CMAP tablosunda olduğuna inanıyorum. Yazı tipleri konusunda uzman değilim, ancak benim anlayışım CMAP tablonun, unicode noktalarını glif endekslerine eşlemesidir. Bu nedenle, bir unicode noktasına eşlenmiş bir glif yoksa, yazı tipinin bu karakteri desteklemediği varsayılabilir.

İşte WPF medya kütüphanelerini kullanarak bulduğumuz bazı örnek C# kod:

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

bu sizin olacak Ne kadar yardımcı bilmiyorum, ancak herhangi bir dil/çözüm değerli olacağını söylemişti.

Tüm bu sınıflar, PresentationCore.dll derlemesinin bir parçası olan System.Windows.Media namespace'da bulunabilir.

+1

Bu çok ilginç, teşekkürler. – daveyfaherty