OpenType Features in FontLab


Het bestandsformaat OpenType geeft de ontwerper van een lettertype zeer veel controle over het voorkomen van het eindresultaat. Het is niet zo moeilijk om hiermee wat fantasieën in te bouwen die in geen enkel ander font voorkomen.

Het grootste probleem is weten waar je dat dient te doen, en met welke code. In dit voorbeeld wordt stap voor stap getoond hoe er een flipperfont gemaakt wordt. Eérst wordt er getoond hoe je de letters correct in het font invoegt, daarna gaan we over naar de code. Met deze basis is het dan mogelijk om later zelf fonts op te bouwen.

Wat is een flipperfont?

Onderstaand voorbeeld is een normaal lettertype. Wordt de letter n ingegeven, dan zal die letter gewoon verschijnen:

Een normale letterreeks

Alle letters zijn hier hetzelfde: glyph nummer 1 genummerd met een blauw cijfer.

Onderstaand voorbeeld geeft weer hoe een flipperfont dan werkt: twee dezelfde glyphs zullen elkaar nooit opvolgen:

Een normale letterreeks

Dit zijn allemaal representaties voor een 'n,' maar zijn toch allemaal verschillend. alternatief nummer 1 wordt opgevolgd door alternatief nummer 2, gevolgd door alternatief nummer 3 enz, totdat alle alternatieven aan bod gekomen zijn. Daarna wordt er opnieuw begonnen: alternatief nummer 1, gevolgd door alternatief nummer 2, enz.

Hoe kan je dit zelf maken?

Begin met het invoegen van elke glyph die in jouw font dient te zitten. Dit kunnen de standaard glyphs zijn die FontLab aanraadt in het overzicht, maar je kan er ook toevoegen met het menu Glyphs->Create Glyphs.

Glyphs overzicht in FontLab

Is je lettertype voltooid, dan voeg je van elke letter de gewenste alternatieven in. Dit doe je via het menu Glyph -> Generate glyphs:

alternatieven op alle letters toevoegen

Om het voorbeeld van de letter n aan te houden typ je hier ‘n.alt1 n.alt2 n.alt3 n.alt4 n.alt5 n.alt6 n.alt7 n.alt8 n.alt9’. Hierbij is alt een afkorting voor alternate; alternatief. Druk op OK en FontLab genereert de alternatieven van jouw letter, in dit voorbeeld negen stuks. Vervang de letter n door de andere letternaam waarop je alternatieven wil maken, bijvoorbeeld ‘A.alt1 A.alt2 A.alt3 A.alt4 A.alt5 A.alt6 A.alt7 A.alt8 A.alt9.’

In het overzichtspaneel van FontLab worden al je alternatieven nu opgesomd. Bewerk al deze alternatieven, zodat ze genoeg afwijken van de standaard, maar niet te veel afwijken om niet meer bij het font te passen.

Hoe programmeer je dit?

Je alternatieven zullen niet zo maar werken: je font weet nog niet wat het daar mee moet doen, dus je alternatieven moet je programmeren. Deze Features zijn specifiek voor de OpenType. (Features zou vertaald kunnen worden als 'kenmerken,' maar omdat het een soort begrip is wordt het woord ook in het Nederlands gebruikt.) Om deze Features in je font in te voegen open je het OpenType paneel in het menu Window->Panels->OpenType.

In dit paneel voeg je eerst code in doe alternatieven activeert: druk op het plusje onderaan dit venster en vervang de code die verschijnt door:

feature aalt{
feature calt;
} aalt;

aalt staat voor Access All Alternates (toegang tot alle alternatieven). In aalt zouden er dus nog features geplaatst kunnen worden, maar hier blijft de opsomming beperkt tot calt. calt staat dan weer voor Conextual Alternates (contextuele alternatieven). In deze contextuele alternatieven bepaal jij als ontwerper wanneer er een alternatieve lettervorm gebruikt dient te worden. In calt kan je haast het volledige uiterlijk van het font wijzigen als je dat wenst.

Druk opnieuw op het plusteken onderaan het OpenType paneel. Om dit nieuwe Feature te openen begin je met een regel

feature calt {

Deze regel (inclusief het haakje) bepaalt dat deze code voor de calt geldt. Hierdoor weten programma's naderhand wat ze met de alternatieven moeten doen. daarna vervolledig je deze code met:

sub n n' by n.alt1;
sub n.alt1 n' by n.alt2;
sub n.alt2 n' by n.alt3;
sub n.alt3 n' by n.alt4;
sub n.alt4 n' by n.alt5;
sub n.alt5 n' by n.alt6;
sub n.alt6 n' by n.alt7;
sub n.alt7 n' by n.alt8;
sub n.alt8 n' by n;

Elke regel stopt met een puntkomma! Dit is de meest voorkomende fout als er iemand programmeert. En je sluit natuurlijk ook weer af met een haakje en de naam van de Feature en een puntkomma:

} calt;

De code zou er nu als volgt uit moeten zien: (de nummering bepaal je zelf)

De code om een n te laten flipperen

Noot: alle tekst die volgt achter een # is een reminder voor als je je later iets wilt herinneren. Dit doet niets met de code.

Wat doet deze code? sub staat voor substitute (vervang), en by is het engelse woord voor door. dus de eerste regel zegt: als een n gevolgd wordt door een n, vervang deze dan door n.alt1: alternatief nummer 1. De letter met een apostrof is de letter die vervangen zal worden. De tweede regel zegt dat als de eerste variant op een n gevolgd wordt door een normale n, deze tweede n op zijn beurt ook vervangen moet worden door variant nummer 2, enz. De laatste regel mag toegevoegd worden, maar is niet noodzakelijk omdat als er niets in de code voorkomt, de normale letters blijven staan.

Genereer de OpenType Code met de knop 'Generate' in de werkbalk, zodat de code actief wordt. Daarna kan je de resultaten bekijken in het preview-paneel van Fontlab:

Voorvertoning in FontLab

In dit voorvertoningspaneel van FontLab klik je op de tab 'OpenType Features' en activeer calt in de linker kolom. Typ een reeks n-nen in de tekstregel, in het tweede tekstvak zal de letter n flipperen, net zoals het voorbeeld aan het begin van deze uitleg. (En onderaan het paneel verschijnen ook de namen van de alternatieven die FontLab begint te gebruiken.) Dit is nog niet genoeg: wij willen natuurlijk dat alle letters dit gaan doen. Je kan deze code gaan schrijven voor alle andere letters. Maar dat is veel werk, het kan eenvoudiger. Hiervoor bestaan er Classes (klassen).

Klassen zijn groeperingen van letters die op een of andere manier een overeenkomst hebben. Het paneel om klassen aan te maken is te vinden onder het menu Window->Panels->Classes. Alle letters uit het font behoren tot een klasse, en alle alternatieven gaan per nummer onder een andere klasse, totdat alle nummers over een klasse beschikken.

Creëer tien klassen aan de linkerkant van het paneel, met een herkenbare naam. In een zeer uitgebreid lettertype is het dan mogelijk om je klassen gemakkelijker terug te vinden. Sleep je letters uit het overzichtspanneel naar de correcte klasse. Vervolgens zou je volgende opbouw moeten bekomen:

Class_calt -alle normale letters
Class_alt1 -alle letters met het suffix .alt1
Class_alt2 -alle letters met het suffix .alt2
Class_alt3 -alle letters met het suffix .alt3
Class_alt4 -alle letters met het suffix .alt4
Class_alt5 -alle letters met het suffix .alt5
Class_alt6 -alle letters met het suffix .alt6
Class_alt7 -alle letters met het suffix .alt7
Class_alt8 -alle letters met het suffix .alt8
Class_alt9 -alle letters met het suffix .alt9
De klassen in een flipperfont

Als dit gebeurd is, dan dient de code in het OpenType paneel veranderd te worden. Verplaats de voorgaande code in de calt met:

feature calt {
sub @class_calt @class_calt' by @class_alt2;
sub @class_alt2 @class_calt' by @class_alt3;
sub @class_alt3 @class_calt' by @class_alt4;
sub @class_alt4 @class_calt' by @class_alt5;
sub @class_alt5 @class_calt' by @class_alt6;
sub @class_alt6 @class_calt' by @class_alt7;
sub @class_alt7 @class_calt' by @class_alt8;
sub @class_alt8 @class_calt' by @class_alt9;
sub @class_alt9 @class_calt' by @class_alt10;
sub @class_alt10 @class_calt' by @class_calt;
} calt;

In plaats van dus naar losse letters te kijken, is de code nu per klas aan het kijken of er overeenkomsten zijn. Dat bespaart enkele duizenden lijnen code. Met deze code is het niet enkel zo dat twee dezelfde letters die op elkaar volgen, zoals de n, zullen afwisselen, maar met deze code zullen continu de alternatieven aangesproken worden. Genereer de OpenType code met de knop in de werkbalk, zodat de nieuwe code actief wordt.

Veel plezier met het ontwerpen van fonts die zich niet op de normale manier gedragen! Nog een laatste tip: test de code regelmatig uit tijdens het typen, want een foutje is vlug gemaakt!

Natuurlijk is het aan te raden om de OpenType Features doordacht te gebruiken: het kan de computer zwaar belasten, en een overdadig gebruik laat niet elk font tot zijn recht komen...

Referenties

De oorspronkelijke locatie van deze informatie was: http://www.ww.typophile.com/node/92227

Een volledige lijst met alle OpenType Features kan gevonden worden op: http://en.wikipedia.org/wiki/OpenType_feature_tag_list#OpenType_Typographic_Features