Module optionnel · pdftoolkit/opentype 0.1.0
English | Français
D'abord Unicode, ensuite les glyphes
Une lettre n'est pas un identifiant de glyphe. Le même scalaire Unicode peut
avoir des glyphes différents selon la fonte ; une ligature peut représenter
plusieurs caractères par un glyphe. Résoudre les objets CodePoint avec
UnicodeCharacterMap, puis construire la GlyphSequence.
L'exemple du README commence avec f, f,
i, obtient leurs glyphes via cmap et demande la fonctionnalité latine liga.
Si la fonte définit cette ligature pour la sélection, le résultat contient son
glyphe et conserve l'origine des clusters.
Sélectionner la fonctionnalité
FeatureSelection décrit script, système de langue, fonctionnalités et choix de
repli. Le système de langue par défaut appartient à un script. Les tags de
langue OpenType sont des identifiants de fonte, pas des locales comme fr-FR.
Le tag exprime un rôle ; ses lookups définissent la transformation. smcp
sélectionne les petites capitales si la fonte fournit cette fonctionnalité.
Il ne réduit pas géométriquement les capitales.
$smallCapitals = new FeatureSelection(new Tag('latn'), features: [new Tag('smcp')]);
$result = (new SubstitutionEngine())->apply($gsub, $smallCapitals, $input);
Le moteur inclut la fonctionnalité obligatoire du système de langue choisi. Chaque lookup sélectionné est exécuté dans l'ordre de la liste, une seule fois même si plusieurs fonctionnalités le référencent. Sa première sous-table correspondante fournit la transformation.
Choisir une variante
AlternateIndex exprime le choix de l'application avec un indice commençant à
un. Il n'y a ni préférence aléatoire ni sélection globale cachée.
use PDFToolkit\OpenType\Substitution\AlternateIndex;
$alternates = new FeatureSelection(
new Tag('latn'),
features: [new Tag('salt')],
alternateSelector: new AlternateIndex(1),
);
$result = (new SubstitutionEngine())->apply($gsub, $alternates, $input);
La fonctionnalité doit exister et utiliser des lookups pris en charge. Une fonctionnalité absente ne crée pas de glyphes. Un lookup sélectionné non pris en charge provoque une erreur explicite ; une substitution alternative sélectionnée nécessite un sélecteur de variante.
Examiner le résultat
Depuis un clone du dépôt :
composer install
php examples/substitution.php
php examples/manual-ligature.php
L'exemple démontre liga, smcp, salt et une substitution multiple avec la
fonte de test reproductible. La sortie contient les glyphes et clusters
d'origine ; le validateur indépendant compare les transformations prises en
charge avec HarfBuzz. Ce sont des résultats du format de fonte, sans rendu PDF.
L'exemple de construction manuelle
construit directement Coverage, LigatureSet, LookupList, FeatureList et ScriptList.
Ses identités illustratives sont f=4, i=5, ffi=7 : l'entrée [4,4,5] devient
[7] avec le cluster d'origine [0]. Ce chemin utilise le même moteur sans lire
de fonte. L'exemple de métriques
explique séparément les correspondances Unicode, unités de dessin et sélecteurs
de variation.
Positionnement, mise en lignes et encodage PDF demandent un traitement explicite supplémentaire. GPOS et le shaping complet restent à implémenter ; sélectionner les glyphes ne suffit pas à produire le texte final d'une page.
Voir la couverture, GSUB et le registre des fonctionnalités.