lundi 13 octobre 2008
CSS Inliner
lundi 13 octobre 2008 - Geek
Récemment Alice et moi avons écrit un modèle de newsletter en XHTML et CSS pour le site BTPinformaTIC où Martin travaille. Malheureusement cette traduction de l'article "CSS and Email, Kissing in a Tree" nous explique que le support des CSS par les différents clients mail de ce monde est très restreint. Notamment hotmail qui ne comprend rien à part les styles en ligne : <tag style="...">. Il faut ajouter à ça que la rédaction du site utilise un éditeur HTML intégré au site et que celui-ci ne permet pas du tout l'inclusion de balise <style> ou de lien vers une feuille de style externe, ou même de balise <head>, bref : rien à part des styles en ligne.
Pas de problème, mon code est du XHTML valide, je suis parti pour écrire un Inliner CSS en Python qui mettra tous les styles CSS en ligne dans chaque balise !
Pour commencer j'ai écrit un parser XML en python grâce à lxml. Ça tient en 5 lignes !
Ensuite pour écrire un parser CSS j'utilise cssutils qui n'est pas encore dans Macports (l'équivalent des ports de BSD sous Mac OS X et Darwin), j'ai donc rapidement écrit un port de cssutils pour Mac OS X.
Ensuite on colle les morceaux ensemble, on parcours l'arbre des balises, ajoutons-y une fonction pour fusionner les styles sans duplication, on corrige l'ordre d'application... Et voilà, on a un Inliner CSS !