2013-07-01 31 views
7

Câu hỏi của tôi là về ligature trong Glyphs. Có ví dụ này trong msdn:Làm thế nào tôi có thể thực hiện ghép ký tự trong Glyphs?

<!-- "Open file" with "fi" ligature --> 
<Glyphs 
FontUri    = "C:\WINDOWS\Fonts\TIMES.TTF" 
FontRenderingEmSize = "36" 
StyleSimulations = "BoldSimulation" 
UnicodeString  = "Open file" 
Indices    = ";;;;;(2:1)191" 
Fill    = "SlateGray" 
OriginX    = "400" 
OriginY    = "150" 
/> 

Tôi không thể tìm thấy bất kỳ tài liệu chi tiết nào trong việc giải thích những gì đang xảy ra trong thuộc tính Chỉ mục. Khi tôi cố gắng tạo ra một Glyphs với các nhân vật Ba Tư, cho phép nói "من", tôi nhận được

م‌ن 

Thay vì

من 

Vì vậy, câu hỏi là: Làm thế nào tôi có thể thực hiện chữ ghép nhân vật trong Glyphs?
Bằng cách này, tôi biết rằng tôi có thể sử dụng FormattedText hoặc TextFormatter.FormatLine (...) phương pháp, Nhưng tôi muốn biết nếu có cách nào để làm điều này trong Glyphs hoặc GlyphRun.

Trả lời

9

Cú pháp của thuộc tính Indices được giải thích trong phần Nhận xét của tài liệu Glyphs.Indices trong MSDN.

Mỗi đặc điểm kỹ thuật glyph có dạng sau.

[GlyphIndex][,[Advance][,[uOffset][,[vOffset][,[Flags]]]]]

Các [] xung quanh mỗi lĩnh vực có nghĩa đó là không bắt buộc. Do đó tất cả các trường là tùy chọn, có nghĩa là một đặc tả chỉ mục glyph có thể hoàn toàn trống.

Giá trị ";;;;;(2:1)191" trong ví dụ này bao gồm sáu thông số kỹ thuật như vậy, được phân tách bằng dấu chấm phẩy, trong đó năm dấu đầu tiên trống. Trong trường hợp đặc tả chỉ mục glyph rỗng, WPF lấy chỉ số glyph thực tế từ thuộc tính GlyphTypeface.CharacterToGlyphMap.

Các tài liệu cũng cho biết

Các đặc điểm kỹ thuật của hình tượng đầu tiên trong cluster được đi trước bởi một đặc điểm kỹ thuật bao nhiêu glyphs và bao nhiêu điểm mã kết hợp để dạng cluster.

Đây là tiền tố (2:1) nghĩa là gì. Nó chỉ định rằng hai ký tự từ chuỗi nguồn được thay thế bằng một glyph. Và tất nhiên glyph có chỉ số 191.

Bản thân chỉ mục glyph chỉ là chỉ mục của hình tượng cụ thể đó trong phông chữ đã chọn. Trong ví dụ này, nó là fi glyph ligature (một glyph đơn) tại vị trí chỉ mục 191 trong phông chữ Times.ttf.

Trong ví dụ về nhân vật ba tư của bạn, tất cả phụ thuộc vào phông chữ bạn đang sử dụng. Bạn phải điều tra nó để tìm ra glyph thay thế thích hợp cho hai nhân vật đó. Nó cũng có thể là đủ để chỉ thay thế glyph thứ hai bởi một số khác, trong trường hợp đó bạn có thể bỏ qua các đặc điểm kỹ thuật (2:1) và chỉ cần viết chỉ số glyph thích hợp.


UPDATE: Một công cụ rất đơn giản để kiểm tra tất cả các glyphs trong một tập tin phông chữ có thể được viết như thế này:

<ListBox ItemsSource="{Binding GlyphItems}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="50"/> 
        <ColumnDefinition/> 
       </Grid.ColumnDefinitions> 
       <Glyphs FontUri="{Binding FontUri}" Indices="{Binding Indices}" 
         FontRenderingEmSize="36" OriginX="10" OriginY="36" 
         Fill="Black"/> 
       <TextBlock Grid.Column="1" VerticalAlignment="Center" 
          Text="{Binding Indices, StringFormat=Index {0}}"/> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Code:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     GlyphItems = new List<object>(); 

     var font = @"C:\WINDOWS\Fonts\TIMES.TTF"; 

     for (int i = 0; i < new GlyphTypeface(new Uri(font)).GlyphCount; i++) 
     { 
      GlyphItems.Add(new { FontUri = font, Indices = i.ToString() }); 
     } 

     DataContext = this; 
    } 

    public List<object> GlyphItems { get; set; } 
} 
+0

Cảm ơn lời giải thích. Trên thực tế câu hỏi của tôi là về cách tôi có thể điều tra các phông chữ để có được các chỉ số. Tôi không thể tìm thấy bất kỳ tài liệu nào về điều này. Tôi biết rằng nó có liên quan đến một số bảng, nhưng không có gì hơn. Tôi sẽ biết ơn nếu bạn giải thích phần này quá (Xin lỗi nếu câu hỏi của tôi không phải là rất rõ ràng). – Ramin

+0

Điều đó dường như là một phần khó khăn. Microsoft có một công cụ gọi là [VOLT] (http://www.microsoft.com/typography/volt.mspx) nhưng tôi không thể làm cho nó tải các phông chữ trên hệ thống Window 8 của tôi, mặc dù chúng ở đó. – Clemens

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