Ainsi apparût SmartyPants Typographer

À l’image de PHP Markdown Extra, je dévoile aujourd’hui une version spéciale de PHP SmartyPants pour supporter différent types de guillemets et une conversion automatique des espaces autour des signes de ponctuation en espace insécable pour éviter les sauts de ligne indésirables. Laissez-moi vous présenter SmartyPants Typographer et sa petite histoire.

En français, il est usuel d’avoir une espace devant certain signes de ponctuation, comme le deux-point ” :” et à l’intérieur des « guillemets ». Il est aussi commun de retrouver une espace devant d’autres signes de ponctuation tel que le point d’exclamation, le point d’interrogation et le point-virgule. Le problème est que la majorité des gens ne savent pas, ou ne comprennent pas, ce qu’est une espace insécable. Ça s’affiche identiquement à une espace normale et à moins de voir une coupure de ligne là où il ne devrait pas y en avoir il est difficile de s’apercevoir du problème. Le problème arrive quand le navigateur adapte les sauts de ligne pour faire entrer le texte dans la page.

Typographer, en tant que projet, a commencé il y a quelques années quand je voulais une façon d’éviter ces sauts de ligne indésirable sur mon site web. Un peu après avoir porté le logiciel SmartyPants de John Gruber, j’ai commencé à travailler sur un petit projet du même genre appelé Cosmos pour rendre l’espace plus intelligent(e). Et ainsi j’ai construit une petite collection d’expression régulières qui remplacent les espaces par des espaces « intelligentes » autour de la ponctuation, à l’intérieur des nombres (en tant que séparateur de millier) et devant les symboles d’unités les plus courants (comme kg, °C, Ko).

J’ai aussi ajouté une façon de forcer l’insertion d’une espace quand il n’y en avait pas déjà. L’idée étant d’utiliser le script pour imposer des règles typographiques strictes. Mais puisqu’il ne semble pas y avoir de règle en français qui font l’unanimité, j’ai été contraint d’ajouter une configuration séparée pour chacun des caractères.

J’ai intégré Cosmos sur mon site web rapidement, aussi facilement que PHP SmartyPants et PHP Markdown, et j’étais prêt depuis ce moment à publier le logiciel en tant que script séparé qui aurait fonctionné sur WordPress et en tant que filtre de texte pour Smarty, comme PHP SmartyPants en fait. Il n’y avait qu’un problème : je voulais une configuration par défaut qui pouvait fonctionner pour tout le monde. Un autre inconvénient était qu’il que Cosmos ajoutait un étage supplémentaire de découpage HTML par dessus SmartyPants, ce n’est évidemment pas très grave, mais c’était tout de même quelque chose que j’aurais aimé éviter.

Cosmos a stagné comme ça pendant un an ou deux dans cet état presque prêt. Puis, en octobre 2005 est arrivé une discussion sur la liste de diffusion de Markdown qui m’a fait réfléchir. La discussion portait sur l’ajout de nouveau types de guillemets dans SmartyPants pour d’autres langues. J’en suis venu à la conclusion que SmartyPants pourrait facilement supporter les guillemets pour à peu près toutes les langues occidentales avec seulement quelque additions.

Tout ceci m’a beaucoup intéressé. Il m’est aussi venu à l’idée que je pourrais intégré Cosmos dans une nouvelle version internationale de SmartyPants. Quand j’ai suggéré cette idée sur la liste, John Gruber m’a répondu ceci (traduction libre) :

Pourrait faire une bonne addition. Ça correspond à peu près à une fonction de SmartyPants si on considère SmartyPants comme un système contrôlant tout ce qui se rapporte à la typographie sur le web et la mise en page, et non pas seulement la ponctuation.

J’ai ajouté de l’emphase sur les mots qui sont devenu l’inspiration du nouveau nom : SmartyPants Typographer. J’ai pensé à lui donner un nom distinct en français, comme je fais avec Contrôle Gamma, qui s’appelle Gamma Control en anglais, mais j’ai renoncé à mélanger deux langues dans le même nom, ce qui aurait donné SmartyPants Typographe, pas évident à prononcer correctement.

Au milieu de Mai, j’ai finalement décidé de me lancer dans la conception d’une version orienté objet de PHP Markdown. L’idée était de pouvoir utiliser à la fois PHP Markdown et PHP Markdown Extra dans le même script PHP, quelque chose que j’aurai besoin dans le futur. J’ai aussi fais la même chose avec PHP SmartyPants, mais avec le but un peu plus secret de créer Typographer. L’écrire en tant qu’extension à un SmartyPants orienté objet rend possible d’utiliser simultanément plusieurs configurations d’espacement dans le même script PHP en créant plusieurs instances du filtreur.

Alors j’ai créé Typographer en me basant sur le nouveau PHP SmartyPants orienté objet. J’ai ensuite décidé que j’avais besoin d’un peu plus grand bassin de test. Cosmos fonctionnait sur mon site web depuis longtemps, mais seulement pour ce que moi j’écrivais afin de forcer mes règles d’espacement personnalisé autour de la ponctuation dans mes textes en français. Alors j’ai demandé un peu d’aide à Rémi Prévost : je lui ai demandé d’installer Typographer sur son blogue basé sur WordPress. Il a accepté, et j’ai commencé à surveiller la conversion des espaces dans les différents commentaires qu’il a reçu. Je serais surpris que quiconque ait remarqué quoi que ce soit, mais en allant voir le code source des pages je pouvais m’assurer que les espaces insécables étaient placés aux bons endroits. La conclusion est qu’à l’exception de deux bogues mineurs, tout semble parfait. Merci Rémi pour les tests.

Les deux bogues sont corrigés. Maintenant que je suis satisfait du résultat, maintenant que tout a été testé et que je sais que ça fonctionne bien, je vous laisse essayer PHP SmartyPants Typographer, que vous pouvez télécharger depuis la page d’accueil de PHP SmartyPants. Vous pouvez aussi l’essayer à partir du Banc d’essai de PHP Markdown.

Notez que Typographer, dans sa configuration par défaut, n’ajoute pas ni n’enlève d’espace à votre texte ; il ne fait que rendre les espaces insécables là où ça fait du sens. Il devrait s’accorder avec à peu près n’importe quelle langue, et devrait passer plutôt inaperçu, excepté pour l’absence de coupure de ligne aux mauvais endroits autour de la ponctuation.


  • © 2003–2024 Michel Fortin.