2012-07-25 13 views
6

Tworzę proste narzędzie do pomocy w czcionkach ikon CSS.Jak wykryć znaki zdefiniowane czcionką?

Obecnie trwa określona czcionka w stylu wingdings i przedstawia ją w postaci, w jakiej pojawia się dla każdego numeru Unicode, obok standardowej czcionki systemowej (np. Arial) w momencie, gdy się wybieram. z numerów Unicode 33-255.

Ci, którzy już znają czcionki i kodowanie znaków, już odgadli, wiele z tych miejsc będzie pustych. Oto przykład: enter image description here

Jak widać, znaki, które są rzeczywiście warto pokazać na tej czcionki są w mniejszości, a wiele znaków w tym zakresie unicode nawet nie pojawił się na domyślną czcionkę sans-serif . To nie jest rzecz krytyczna, mimo że wszystkie użyteczne postacie są pokazywane, ale z czystej ciekawości, chciałbym wiedzieć, czy istnieje sposób na określenie, które postacie są reprezentowane czcionką. Czy ktoś zna rozwiązanie?

Najlepiej, gdy preferowane jest rozwiązanie po stronie serwera, w dowolnym języku. Jednak każde rozwiązanie byłoby cenne.

Dla ciekawskich, mój istniejący kod jest maksymalnie na github: Font Looper

Mam nadzieję, że prezentacja płaskim plik nie obrazić nikogo zbyt wiele, staram się zachować ten chude i myśli.

+0

Niezły pomysł. Powodzenia dla miłośnika czcionek. Przepraszam, nie mogę pomóc, ale lubię to. –

Odpowiedz

3

Uważam, że informacje, których szukasz, znajdują się w tabeli czcionek CMAP. Nie jestem ekspertem od czcionek, ale rozumiem, że tabela CMAP mapuje punkty unicode na indeksy glifów. Więc jeśli nie ma glifów zmapowanych do punktu unicode, to można założyć, że czcionka nie obsługuje tego znaku.

Oto niektóre próbki C# kod znalazłem wykorzystaniem bibliotek multimedialnych 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()); 
      } 
     } 
    } 
} 

nie wiem ile pomoc ta będzie dla ciebie, ale ty nie powiedzieć dowolny język/rozwiązaniem byłoby cenne.

Wszystkie te klasy można znaleźć w System.Windows.Media namespace, która jest częścią zestawu PresentationCore.dll.

+1

To bardzo interesujące, dziękuję. – daveyfaherty

Powiązane problemy