Export des billets Dotclear en ODT

Comme dirait la demoiselle : « Oops, I did it again » (oui, je sais, je ne suis pas fier). Il y a quelque temps (deux ans en fait) que je m’intéresse au format OpenDocument, utilisé principalement par OpenOffice. Je vous annonce donc solannellement en ce jour béni de votre divinité préférée le résultat de mon labeur acharné : un plugin d’export des billets de Dotclear en ODT. Oui, tout ça pour ça.

old book stara ksiazka
Creative Commonsold book stara ksiazka” par v.max1978

Le format ODT

Depuis les débuts de l’informatique grand public, le traitement de texte est omniprésent, et a rapidement remplacé la machine à écrire. Au début des années 90, plusieurs logiciels de bureautique se faisaient concurrence, Microsoft Word bien sûr, mais aussi Corel WordPerfect, AppleWorks, etc.

Les éditeurs de logiciel on vite compris que leur logiciel servait avant tout à traiter des données, et que pour battre la concurrence il fallait être capable de lire leur format tout en s’assurant qu’ils ne pourraient pas lire le sien. Il s’en est suivi une guerre des format, accentuée par l’explosion des communications et des transferts de fichiers, dont le vainqueur a été Microsoft et le grand perdant l’utilisateur final. Même si il est plus “simple” d’un premier abord pour l’utilisateur final de ne pas se demander si son correspondant utilise le même logiciel, en fait cette simplicité revient à donner les clés de ses données à la société éditrice. Si elle décide de changer son format, comme elle l’a déjà fait plusieurs fois, elle force les utilisateurs à une mise à jour coûteuse. C’est plus facile de vivre dans une dictature, on a pas à choisir pour qui voter.

Il a fallu attendre l’avènement de StarOffice, une suite bureautique réalisée par une société allemande du nom de StarDivision, puis rachetée par Sun, pour voir les prémisses d’un format de bureautique standardisé. StarOffice a ensuite évolué en OpenOffice, dont le format était ouvert (c’est à dire documenté), et qui a été soumis à normalisation. L’ISO a mis son tampon sur une version légèrement modifiée du format, appelé OpenDocument, qu’OpenOffice à utilisé à partir de sa version 2.0.

Enfin, enfin, nous avons un format de bureautique standard, sur lequel tout le monde s’est mis d’accord, et qui répond à nos besoins. Tous ? Non, pas Microsoft bien sûr, qui n’a aucun intérêt à mettre en péril son monopole et l’emprise qu’il a sur ses utilisateurs en adoptant un format de fichier ouvert…

Mais la révolution est en marche, et Microsoft va avoir beaucoup de mal à l’arrêter. Je pense même sincèrement qu’il ne pourra tout au plus que la retarder légèrement. L’OpenDocument voit son adoption progresser très régulièrement, c’est maintenant une question de quelques années.

Et moi dans tout ça

Pour des besoins professionnels, j’ai développé depuis mi-2007 un plugin pour Dokuwiki permettant d’exporter des pages au format ODT. Je me suis donc intéressé à la syntaxe de ce format, et j’ai découvert avec plaisir qu’il est très clair, assez proche de HTML/CSS (pas la peine de réinventer ce qui marche déjà et que tout le monde connaît), et très bien pensé.

Le plugin achevé (et, avouons-le, légèrement grisé par la réussite), je me suis dit que je devais absolument faire des exports ODT sur d’autres logiciels pour populariser le format. Finalement, l’eau à coulé sous les ponts, j’ai été pris par d’autres choses, j’ai vaguement commencé à participer à l’export ODT sous SPIP, mais je ne me suis jamais vraiment impliqué.

Depuis ma migration sous Dotclear, j’avais en tête de réaliser un export ODT. C’est maintenant chose faite.

A Rainbow Of Books
Creative CommonsA Rainbow Of Books” par Dawn Endico

Comment ça marche

Pour ne pas recoder ce qui existe déjà, je me suis appuyé sur odtPHP, un module d’accès aux fichiers ODT depuis PHP (développé par une boîte française au passage). Mon objectif était de permettre à l’utilisateur de Dotclear de faire un fichier ODT qui contiendrait potientiellement les mêmes tags que ceux qu’il a utilisé pour faire son thème. De cette façon, on reste au maximum dans l’esprit Dotclear, et pas la peine d’apprentre un nouveau langage de templates. L’infrastructure de Dotclear n’est pas aussi souple que celle de Dokuwiki sur cet aspect-là, ça a donc été un peu plus compliqué de brancher le générateur ODT sur le moteur de templates de Dotclear.

Une fois ce branchement réalisé, j’avais donc du HTML dans mon document ODT. Il me restait alors à le convertir en ODT XML. Il n’existe pas à ce jour de convertisseur complet de HTML vers ODT, la fondation OpenDocument Fellowship a même proposé un prix de 11 500 dollars à qui le réaliserait. Mais ça tombe bien, je n’avais pas besoin de quelquechose de compliqué qui irait re-créer les styles présents dans les feuilles de style CSS, j’avais juste besoin de convertir quelques tags.

Je me suis donc appuyé pour cela sur le moteur de conversion DocBook vers ODT de Consultia, en remplaçant les tags Docbook par le HTML auquel je m’attends. Ma conversion est donc entièrement basée sur des feuilles de traduction XSL ! Cool, non ?

Enfin, j’ai paufiné le plugin pour le faire respecter les conventions Dotclear sur les plugins, lui ajouter un tag pour les thèmes graphiques, et un widget pour proposer facilement un export sur toutes les pages.

Les conséquences de tout ça, c’est que pour fonctionner le plugin nécessite le module XSL de PHP, disponible dans toutes les bonnes distribs, dont le nom du paquet est en général “php-xsl”. Il est aussi absolument nécessaire que les billets à exporter soient valides XHTML, donc pensez à utiliser le lien “Validation XHTML” sous la fenêtre d’édition de billet.

Conclusion

Mon plugin peut donc convertir tout post en ODT, mais aussi les pages, ainsi que la page d’acceuil. Par défaut, les documents générés sont très simples, mais je propose aussi un modèle d’export pour la page d’accueil permettant d’exporter tous les articles du blog, avec tout leur contenu. Une conversion du blog entier en ODT, en somme.

Le code est sous licence AGPLv3, comme toujours, et je vous attache à ce billet un Zip tout prêt à être déployé dans votre blog Dotclear.

Le plugin est maintenant publié sur le lab Dotclear, donc utilisez la page associée pour ouvrir des tickets et pour télécharger le plugin.

Si ça vous intéresse, essayez-le et remontez-moi les bugs (ou les idées d’amélioration). Je ferai de mon mieux pour le maintenir et le faire évoluer. Comme vous avez pu comprendre, c’est un sujet qui me tient à cœur…

AGPL

Téléchargement direct : plugin-odt.zip

Mises à jour

  1. ajout des dépendances du plugin.
  2. mise à jour du plugin, version 0.2 (voir le commentaire associé)
  3. corrections des dépendances d’odtPHP
  4. mise à jour du plugin, version 0.3 : nombreuses améliorations, suppression de la dépendance à Zip et PHP ≥ 5.2
  5. mise à jour du plugin, version 0.4 : meilleure page d’admin
  6. mise à jour du plugin, version 0.5 : meilleure gestion des tableaux
  7. publication sur le lab, la suite se passe là-bas
Vus : 505
Publié par Aurélien Bompard : 19