Jump to content
Postkarten-ABC zum Sammeln oder Verschenken …

Verbünde in Dreierfolgen

Empfohlene Beiträge

Joshua K.

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

Link zu diesem Kommentar
Sebastian Nagel

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?

Link zu diesem Kommentar
Joshua K.

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?

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Joshua K.
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 . . .

Link zu diesem Kommentar

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 erstellen

Einloggen

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden

Unsere Partner

FDI Type Foundry besuchen
Entdecke hunderte Font-Sonderangebote.
Hier beginnt deine kreative Reise.
Mit über 130.000 Fonts der größte Schriften-Shop im Internet.
Adobe Stock kostenlos testen und 10 Gratis-Medien sichern …
×
×
  • Neu erstellen...

🍪 Hinweis:

Wir benutzen funktionale Cookies.