Joshua K. Geschrieben März 27, 2009 Geschrieben März 27, 2009 Ich möchte in einer OpenType-Schrift erreichen, daß in Dreierfolgen (beispielsweise „ffi“), für die es keinen Verbund gibt, der Verbund für die letzten beiden (fi) und nicht für die ersten beiden Buchstaben (ff) gesetzt wird. Das funktioniert, wenn ich die Verbünde auf zwei Ligatur-Abfragen aufteile: die „hinteren“ Verbünde (fi) in die erste, die „vorderen“ Verbünde (ff) in die zweite. (Auf zwei Untertabellen aufgeteilt klappt es nicht.) Wie kann das aber sein? Eigentlich müßten die Buchstaben doch von links nach rechts ausgelesen werden, sodaß in der Folge „ffi“ zuerst der ff-Verbund gesetzt wird, und fi dann gar nicht mehr angewandt werden kann, oder? (Das Problem gab es hier im Forum schonmal, es wurde aber nicht geklärt.)
Ralf Herrmann Geschrieben März 27, 2009 Geschrieben März 27, 2009 Was genau ist jetzt die Frage? Und wie in dem anderen Thread: Kopier mal den Feature-Code für die betreffenden Zeichen hier rein.
Sebastian Nagel Geschrieben März 27, 2009 Geschrieben März 27, 2009 hilft es nicht, wenn du zuerst die fi-Ligatur definierst, und erst hinterher die ff? also in dieser Reihenfolge: sub f i by f_i; sub f f by f_f; Dann müsste doch, so es linear abgearbeitet wird, was so sein müsste(?) "f i" durch "f_i" ersetzt, und dann die "f f"-Abfrage nicht mehr anspringen, da es ja kein "f f" mehr zu ersetzen gibt sondern nur noch ein "f f_i" dasteht. Oder versteh ich was falsch?
Joshua K. Geschrieben März 27, 2009 Themen-Ersteller Geschrieben März 27, 2009 Meine genaue Frage ist: Muß ich die Verbünde in zwei Abfragen aufteilen, reicht es, die Reihenfolge der Verbünde zu ändern, oder was ist sonst die sinnvollste Möglichkeit, zu erreichen, daß der Verbund für die beiden hinteren Buchstaben der Dreierfolge gesetzt wird? Der betroffene Code (mit allen Verbünden in einer einzigen Abfrage): lookup ligaStandardLigaturesinLatinloo { lookupflag 0; sub \c \h by \c_h; sub \longs \c \h by \longs_c_h; sub \f \f by \f_f; sub \f \i by \f_i; } ligaStandardLigaturesinLatinloo; feature liga { script DFLT; language dflt ; lookup ligaStandardLigaturesinLatinloo; script latn; language dflt ; lookup ligaStandardLigaturesinLatinloo; } liga; Diesen Code hat Fontforge (!) erzeugt, damit habe ich über die graphische Oberfläche die Ligaturen eingetragen. Das Problem: Auf der Oberfläche kann die Reihenfolge der Verbünde nicht geändert werden; aber obwohl jetzt hier c_h vor longs_c_h steht, wird auch der longs_c_h-Verbund richtig gesetzt. (Möglicherweise sortiert Fontforge die Verbünde intern richtig um?) Wenn ich selbst eine Feature-Datei mit anderer Reihenfolge erstelle und diese in Fontforge einfüge, sortiert Fontforge die Verbünde leider auch wieder wie im obigen Code. Und hier der Code für zwei Abfragen (womit es funktioniert): lookup ligaStandardLigaturesinLatinloo { lookupflag 0; sub \c \h by \c_h; sub \longs \c \h by \longs_c_h; sub \f \i by \f_i; } ligaStandardLigaturesinLatinloo; lookup sub_ligature_ligalatn_0 { lookupflag 0; sub \f \f by \f_f; } sub_ligature_ligalatn_0; feature liga { script DFLT; language dflt ; lookup ligaStandardLigaturesinLatinloo; lookup sub_ligature_ligalatn_0; script latn; language dflt ; lookup ligaStandardLigaturesinLatinloo; lookup sub_ligature_ligalatn_0; } liga; Kann mir jemand bestätigen, daß es funktioniert, wenn der hintere Verbund (fi) vor dem vorderen (ff) in einer Abfrage steht?
Ralf Herrmann Geschrieben März 27, 2009 Geschrieben März 27, 2009 Kann mir jemand bestätigen, daß es funktioniert, wenn der hintere Verbund (fi) vor dem vorderen (ff) in einer Abfrage steht? Nein, das würde nicht funktionieren. Bevor die Layout-Engine zu dem fi kommt, hat sie vorher schon das ff gefunden und ersetzt. Es geht ja eben der Reihe nach durch den Text. Für dieses Problem gibt es aber die Ignore-Funktion: ignore sub f f ; sub f f by f_f; Dann greift die ff-Ligatur bei ffi und ffl nicht mehr. Ralf
Joshua K. Geschrieben März 30, 2009 Themen-Ersteller Geschrieben März 30, 2009 Nein, das würde nicht funktionieren. Bevor die Layout-Engine zu dem fi kommt, hat sie vorher schon das ff gefunden und ersetzt. Es geht ja eben der Reihe nach durch den Text. Hmh, das habe ich vermutet. Ich verstehe allerdings nicht, wieso es dann funktioniert, wenn man die Ligaturen auf zwei Lookups aufteilt. Für dieses Problem gibt es aber die Ignore-Funktion:ignore sub f f ; sub f f by f_f; Vielen Dank! Das scheint genau zu sein, was ich brauche. Leider schluckt Fontforge das nicht, sondern meldet: „All entries in a lookup must have the same type“. Ich wende mich damit mal an die Fontforge-Mailinglist . . .
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenEinloggen
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden