Problème
- Lorsqu’on crée un site web codé à la main en HTML et CSS, la mise en évidence de la syntaxe est difficile
- On souhaite mettre le code en couleur pour que les extraits soient plus faciles à lire et à comprendre
- En général, il faut utiliser des bibliothèques complexes de mise en évidence de la syntaxe comme Prism ou highlight.js
- On veut coder à la main sans utiliser de scripts externes
Intégrer la mise en évidence de la syntaxe directement dans la police à l’aide des fonctionnalités OpenType
- Une police open source appelée Monaspace Krypton a été modifiée pour inclure des versions colorées de chaque caractère
- Les tables
COLR d’OpenType et la fonctionnalité de substitution contextuelle sont utilisées pour repérer puis remplacer certaines chaînes
- Résultat : un surligneur syntaxique simple directement intégré à la police
Avantages et inconvénients
Avantages
- Installation simple : il suffit d’importer la police et d’activer les fonctionnalités OpenType
COLR (couleur) et CALT (substitution contextuelle)
- Pas besoin de JavaScript
- Pas besoin de thème CSS
- Aussi rapide que du texte brut
- On peut ajouter des extraits de code dans les balises
<pre> et <code>
- Code source HTML propre
- Fonctionne partout où les fonctionnalités OpenType sont prises en charge, comme dans InDesign
- Aucun besoin de maintenance ou de mises à jour
- Fonctionne aussi dans
<textarea> et <input>
Inconvénients
- Si l’on veut modifier la palette de couleurs ou ajouter la prise en charge d’un langage, il faut éditer le fichier de police
- Fonctionne uniquement là où OpenType est pris en charge
- La recherche de motifs via la substitution contextuelle OpenType reste basique et ne peut pas rivaliser avec des scripts utilisant des expressions régulières
Fonctionnement concret
- Utilise les tables
COLR d’OpenType et la fonctionnalité de substitution contextuelle
- La table
COLR permet de créer des polices multicolores
- La substitution contextuelle reconnaît les caractères adjacents pour effectuer le remplacement
- Exemple : le mot-clé JavaScript
if est détecté puis remplacé par une variante colorée
Résumé de GN⁺
- Cet article présente une nouvelle manière d’implémenter la mise en évidence de la syntaxe lorsqu’on code un site web à la main
- En exploitant les fonctionnalités OpenType pour intégrer la mise en évidence directement dans la police, il devient possible de surligner la syntaxe sans JavaScript ni thème CSS
- Cette approche convient à une mise en évidence simple, mais elle a des limites face à des bibliothèques plus avancées
- Parmi les projets offrant des fonctions similaires, on peut citer Prism et highlight.js
1 commentaires
Avis Hacker News
Un hack intéressant
font-feature-settings: "colr", "calt";n’a pas de senscolrn’existe pas dans les tables de mise en page OpenTypecaltest activée par défautLe texte d’origine est conservé tel quel
userContent.css, sans encapsulation dans des tags ni JSJe ne suis pas expert OpenType, donc la logique de remplacement pourrait être améliorée
Ce hack est affreux, mais impressionnant
Excellent hack
Il y a un bon message en bas de page
On dirait que cela pourrait être automatisé par du code
Il y a un bug dans les navigateurs basés sur Chromium
color: blue, seul lerest mis en évidenceVraiment très sympa
spanni de balises HTMLOn dirait qu’il faudrait quelque chose qui fonctionne comme un générateur de parseur
C’est vraiment impressionnant