2013-07-01 7 views
7

Meine Frage ist über ligature in Glyphs. Es ist dieses Beispiel in msdn:Wie kann ich die Zeichenligatur in Glyphs implementieren?

<!-- "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" 
/> 

ich keine detaillierten Dokument finden konnten, zu erklären, was in der Indizes Eigenschaft vor sich geht. Wenn ich versuche, ein Glyphen mit persischen Schriftzeichen zu schaffen, lässt „من“ sagen, ich

م‌ن 

Statt

من 

Die Frage ist also: Wie kann ich Zeichen Ligatur in Glyphen umsetzen können?
By the way, ich weiß, dass ich FormattedText oder TextFormatter.FormatLine verwenden können (...) Methode, aber Ich mag wissen, ob es einen Weg gibt, diese oder GlyphRun in Glyphen zu tun.

Antwort

9

Die Syntax der Indices-Eigenschaft wird im Abschnitt "Hinweise" der Dokumentation Glyphs.Indices in MSDN erläutert.

Jede Glyphenspezifikation hat die folgende Form.

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

Die [] um jedes Feld bedeutet, dass ist optional. Daher sind alle Felder optional, was bedeutet, dass eine Glyphenindexspezifikation vollständig leer sein kann.

Der Wert ";;;;;(2:1)191" im Beispiel besteht aus sechs solchen Spezifikationen, die durch Semikolons getrennt sind, wobei die ersten fünf leer sind. Wenn eine Glyphenindexspezifikation leer ist, ruft WPF den tatsächlichen Glyphenindex aus der Eigenschaft GlyphTypeface.CharacterToGlyphMap ab.

Die Dokumentation sagt auch

Die Spezifikation der ersten Glyphe in dem Cluster durch eine Angabe, wie viele Glyphen und wie viele Codepunkte zu kombinieren, um Form der Cluster vorangestellt ist.

Dies ist, was das Präfix (2:1) bedeutet. Es gibt an, dass zwei Zeichen aus der Quellzeichenfolge durch ein Zeichen ersetzt werden. Und natürlich hat diese Glyphe den Index 191.

Der Glyphenindex selbst ist nur der Index dieses bestimmten Glyphs in der gewählten Schriftart. In dem Beispiel ist es das fi Ligaturglyph (ein einzelnes Glyph) an der Indexposition 191 in der Schriftart Times.ttf.

In Ihrem persischen Zeichenbeispiel hängt alles von der Schriftart ab, die Sie verwenden. Sie müssen es untersuchen, um das passende Ersatzzeichen für diese zwei Zeichen zu finden. Es kann auch ausreichend sein, das zweite Glyph einfach durch ein anderes zu ersetzen. In diesem Fall können Sie die (2:1) Spezifikation weglassen und einfach den entsprechenden Glyph-Index schreiben.


UPDATE: Ein sehr einfaches Werkzeug, um alle Glyphen in einer Font-Datei zu inspizieren kann wie folgt geschrieben werden:

<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

Danke für die Erklärung. Meine Frage ist eigentlich, wie ich die Fonts untersuchen kann, um die Indizes zu erhalten. Ich konnte dazu keine Dokumentation finden. Ich weiß, dass es mit einigen Tabellen verwandt ist, aber nicht mehr. Ich wäre Ihnen dankbar, wenn Sie diesen Teil auch erklären würden (Entschuldigung, wenn meine Frage nicht klar ist). – Ramin

+0

Das scheint der schwierige Teil zu sein. Microsoft hat ein Tool namens [VOLT] (http://www.microsoft.com/typography/volt.mspx), aber ich konnte nicht die Schriften auf meinem Windows 8-System laden, obwohl sie da sind. – Clemens

Verwandte Themen