2013-07-01 6 views
7

La mia domanda è circa ligature in Glyphs. C'è questo esempio in msdn:Come posso implementare la legatura dei caratteri in Glifi?

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

non ho trovato alcun documento dettagliato per spiegare quello che sta succedendo nella proprietà indici. Quando cerco di creare un Glifi con caratteri persiani, consente di dire "من", ottengo

م‌ن 

Invece di

من 

Quindi la domanda è: come posso implementare legatura personaggio in Glifi?
A proposito, so che posso usare FormattedText o TextFormatter.FormatLine (...) metodo, ma mi piacerebbe sapere se c'è un modo per fare questo in Glifi o GlyphRun.

risposta

9

La sintassi della proprietà Indices è illustrata nella sezione Note della documentazione Glyphs.Indices in MSDN.

specifica ogni glifo ha la seguente forma.

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

Il [] intorno ogni campo significa che è opzionale. Quindi tutti i campi sono opzionali, il che significa che una specifica dell'indice di glifo può essere completamente vuota.

Il valore ";;;;;(2:1)191" nell'esempio è costituito da sei di queste specifiche, separate da punto e virgola, in cui i primi cinque sono vuoti. Nel caso in cui una specifica di indice di glifo sia vuota, WPF recupera l'indice di glifo effettivo dalla proprietà GlyphTypeface.CharacterToGlyphMap.

La documentazione dice anche

La specificazione del primo glifo del cluster è preceduta da una specifica di quanti glifi e quanti punti di codice si combinano per modulo cluster.

Questo è il significato del prefisso (2:1). Specifica che due caratteri della stringa sorgente sono sostituiti da un glifo. E naturalmente quel glifo ha l'indice 191.

L'indice di glifo stesso è solo l'indice di quel particolare glifo nel carattere scelto. Nell'esempio, è il glifo della legatura fi (un singolo glifo) nella posizione dell'indice 191 nel carattere Times.ttf.

Nell'esempio del carattere persiano, tutto dipende dal tipo di carattere che si sta utilizzando. Devi investigarlo per trovare il glifo sostitutivo appropriato per quei due personaggi. Potrebbe anche essere sufficiente sostituire solo il secondo glifo con un altro, nel qual caso è possibile omettere la specifica (2:1) e scrivere semplicemente l'indice di glifo appropriato.


UPDATE: uno strumento molto semplice per ispezionare tutti i glifi in un file di font può essere scritta in questo modo:

<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> 

Codice:

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

Grazie per la spiegazione. In realtà la mia domanda riguarda come posso indagare i caratteri per ottenere gli indici. Non sono riuscito a trovare alcuna documentazione su questo. So che è legato ad alcuni tavoli, ma niente di più. Ti sarò grato se spieghi anche questa parte (scusa se la mia domanda non è molto chiara). – Ramin

+0

Questa sembra essere la parte difficile. Microsoft ha uno strumento chiamato [VOLT] (http://www.microsoft.com/typography/volt.mspx) ma non sono riuscito a caricare i caratteri sul mio sistema Windows 8, sebbene siano lì. – Clemens

Problemi correlati