2012-07-25 34 views
6

Tôi đang tạo một công cụ đơn giản để trợ giúp với phông chữ biểu tượng css.Làm thế nào tôi có thể phát hiện các ký tự được xác định trong một phông chữ?

Hiện tại, phông chữ được chỉ định, kiểu cánh và biểu thị nó như xuất hiện cho mọi số unicode, song song với phông chữ hệ thống chuẩn (ví dụ: arial) tại thời điểm tôi sẽ từ số unicode 33-255.

Vì những người quen thuộc với phông chữ và mã hóa ký tự sẽ được đoán, rất nhiều những nơi này sẽ trống. Dưới đây là ví dụ: enter image description here

Như bạn thấy, các ký tự thực sự đáng để hiển thị cho phông chữ này là thiểu số và nhiều ký tự trong dãy unicode này thậm chí không hiển thị phông chữ sans-serif mặc định . Đây không phải là công cụ quan trọng, tất cả các nhân vật có thể sử dụng được hiển thị anyway, nhưng hoàn toàn ra khỏi tò mò, tôi rất muốn biết nếu có một cách để cho biết nhân vật được đại diện trong một phông chữ. Có ai biết một giải pháp?

Lý tưởng nhất, một giải pháp phía máy chủ được ưu tiên, bất kỳ ngôn ngữ nào bạn muốn. Tuy nhiên, bất kỳ giải pháp nào đều có giá trị.

Đối với người hiếu, mã hiện tại của tôi là lên trên github: Font Looper

Tôi hy vọng trình bày phẳng tập tin không xúc phạm bất cứ ai quá nhiều, tôi đang cố gắng để giữ này một nạc và có ý nghĩa.

+0

Ý tưởng hay. Chúc may mắn cho font looper. xin lỗi tôi không thể không nhưng tôi thích nó –

Trả lời

3

Tôi tin rằng thông tin bạn đang tìm kiếm nằm trong bảng CMAP của phông chữ. Tôi không phải là chuyên gia về phông chữ, nhưng sự hiểu biết của tôi là bảng CMAP ánh xạ các điểm unicode tới chỉ mục glyph. Vì vậy, nếu không có glyph ánh xạ tới một điểm unicode, sau đó nó có thể được giả định font không hỗ trợ nhân vật đó.

Dưới đây là một số mẫu mã C# Tôi tìm thấy bằng cách sử dụng thư viện phương tiện truyền thông 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()); 
      } 
     } 
    } 
} 

Không biết bao nhiêu sự giúp đỡ này sẽ cho bạn, nhưng bạn đã nói bất kỳ ngôn ngữ/giải pháp sẽ có giá trị.

Tất cả các lớp này có thể được tìm thấy trong số System.Windows.Media namespace là một phần của hội đồng PresentationCore.dll.

+1

Điều này rất thú vị, cảm ơn bạn. – daveyfaherty

Các vấn đề liên quan