Jump to content
Die Schriftmuster der Welt in einer Datenbank …

Verbünde in Dreierfolgen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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?

Geschrieben

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?

Geschrieben

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

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

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

Unser Typografie-Netzwerk

Typography.guru – der englischsprachige Ableger von Typografie.info.
Die Datenbank der Schriftmuster der Welt.
FDI Type Foundry besuchen
Die besten Typografie-Neuigkeiten aus aller Welt bequem per E-Mail erhalten.
Ständig interessante neue Typo-Inhalte auf Instagram. Abonniere @typography.guru.
×
×
  • Neu erstellen...

🍪 Hinweis:

Wir benutzen funktionale Cookies.