De l'action sur le front de la conversion ODT
Le vendredi 13 août 2010, 21:34 - Lien permanent
L’été s’est révélé très fructueux pour mes différents projets logiciels autour du format ODT. Voici un petit tour d’horizon des dernières nouveautés.
Dokuwiki
J’ai publié une nouvelle version de mon plugin d’export ODT pour Dokuwiki. Le changement principal est la prise en compte de la coloration syntaxique fournie par Dokuwiki. Vous pouvez voir un exemple de ce que ça donne sur cette page de mon wiki. Les couleurs du wiki et celles du document ODT ne sont pas exactement les mêmes, c’est normal :
C’est une fonctionnalité qu’on m’avait déjà demandé par le passé, et il s’est avéré que ce n’était pas si compliqué que ça à réaliser, principalement grâce au fait que la syntaxe CSS et la syntaxe des styles dans ODT XML sont très similaires. Ça c’est un format bien conçu, chapeau.
La nouvelle version du plugin est disponible en téléchargement depuis la page officielle du plugin ou directement chez moi. Vérifiez la signature GPG si vous le voulez/pouvez.
XHTML2ODT
Mon projet principal autour du format ODT est clairement XHTML2ODT, le convertisseur XHTML vers ODT (comme son nom l’indique
). Au début de la semaine, j’ai publié la version 1.0, ce qui est toujours une étape importante dans un projet logiciel. Le code qui la constitue a servi de fondation à deux plugins d’export depuis plusieurs mois maintenant, et est très largement couvert par plus d’une centaine de tests unitaires.
J’ai profité des jours suivants dans la semaine pour avancer le développement du projet sur certaines fonctionnalités qui semblaient intéressantes. Dans la même veine que pour le plugin Dokuwiki, j’ai ajouté la prise en compte de la coloration syntaxique fournie par deux moteurs : Pygments (en Python) et GeSHi (en PHP). Tout n’est pas encore parfaitement géré, mais le fonctionnement de la coloration syntaxique pour GeSHi ouvre peut-être la voie à une gestion plus large des styles CSS inclus directement dans le code HTML, par le biais de la balise <style> (c’est ainsi que GeSHi procède).
Enfin, GeSHi a aussi une fonctionnalité amusante : il peut numéroter les lignes du code. Cette fonctionnalité est aussi prise en compte et conservée lors de la conversion en ODT.
Tout ce nouveau code a été publié dans la version 1.1 de XHTML2ODT, que vous pourrez trouver sur la page de téléchargement. Au passage, j’en ai profité pour corriger un petit bug dans la conversion des espaces en mode préformaté, et pour ajouter un petit script de conversion en bash. Le but n’est pas de l’amener au même niveau de fonctionnalités que ses cousins Python et PHP, mais de montrer simplement comment mettre en œuvre les feuilles XSL.
Enfin, autre changement non technique mais non moins important : la licence s’est assouplie. J’ai passé le code de GPL v2 ou plus à LGPL v2 ou plus. Concrètement, cela signifie que si vous insérer le code dans une autre application, et que vous la distribuez, vous n’avez plus besoin de mettre votre application sous GPL. La seule contrainte restante est de publier les changements que vous avez fait sur le code XHTML2ODT lui-même, si vous en avez fait. C’est tout, rien d’autre.
Dernière petite nouvelle, j’ai écrit un article de quatre pages pour le magazine (papier !) Programmez! au sujet d’XHTML2ODT, il devrait sortir à la rentrée. Je vous tiendrai au courant, ça va de soi 
Export ODT pour Trac
J’ai publié une nouvelle version du plugin d’export Trac, pour profiter des évolutions de la bibliothèque principale en ce qui concerne la coloration syntaxique. Vous pouvez voir le résultat en vous rendant sur la page WikiProcessing (fournie par défaut dans Trac) et en cliquant tout en bas sur le lien “OpenDocument”. Ou plus directement, en cliquant ici. Tada ! Le petit bout de code en C au milieu de la page est colorisé.
Dans cette nouvelle version, j’ai aussi tiré parti du système d’ajout de styles proposé maintenant directement dans XHTML2ODT, ce qui simplifie grandement le plugin. Si vous voulez faire un plugin d’export ODT pour une appli en Python, le plugin Trac peut être une bonne source d’inspiration.
Export ODT pour Dotclear
Là aussi, j’ai publié une nouvelle version du plugin d’export Dotclear pour profiter des avancées de la bibliothèque. Dotclear ne fait pas de coloration syntaxique par défaut, mais il existe un plugin pour cela, qui s’appelle syntaxehl, et qui utilise GeSHi en dessous. Le plugin peut fonctionner avec ou sans numérotation des lignes, les deux modes sont traduits en ODT.
Pour que ce soit plus parlant, voici un exemple de ce qui est produit par le plugin SyntaxeHL :
/* Commentaire */ class syntaxeHl { public static function registerFunc($wiki2xhtml) { $dir = dirname(__FILE__).'/geshi/geshi/'; $od = opendir($dir); while($f = readdir($od)) { if(is_file($dir.$f) && substr($f,-4,4)=='.php') { $lang = str_replace('.php','',$f); $wiki2xhtml->registerFunction('macro:['.$lang.']',array('syntaxeHl','parse')); } } } public static function parse($text,$args) { global $core; $settings = $core->blog->settings->syntaxehl; $text = trim($text); $args = preg_replace("/^(\[(.*)\]$)/","$2",$args); $geshi = new GeSHi($text,$args); if(!$settings->get('syntaxehl_enable_klink')) $geshi->enable_keyword_links(false); if($settings->get('syntaxehl_enable_linenum')) $geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS); //if($settings->get('syntaxehl_enable_css_classes')) $geshi->enable_classes(); $geshi->enable_classes();
Et maintenant, avec la numérotation des lignes :
/* Commentaire */ class syntaxeHl { public static function registerFunc($wiki2xhtml) { $dir = dirname(__FILE__).'/geshi/geshi/'; $od = opendir($dir); while($f = readdir($od)) { if(is_file($dir.$f) && substr($f,-4,4)=='.php') { $lang = str_replace('.php','',$f); $wiki2xhtml->registerFunction('macro:['.$lang.']',array('syntaxeHl','parse')); } } } public static function parse($text,$args) { global $core; $settings = $core->blog->settings->syntaxehl; $text = trim($text); $args = preg_replace("/^(\[(.*)\]$)/","$2",$args); $geshi = new GeSHi($text,$args); if(!$settings->get('syntaxehl_enable_klink')) $geshi->enable_keyword_links(false); if($settings->get('syntaxehl_enable_linenum')) $geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS); //if($settings->get('syntaxehl_enable_css_classes')) $geshi->enable_classes(); $geshi->enable_classes();
Pour voir ce que cela donne en ODT, il vous suffit d’exporter ce billet de blog (le bouton est en haut à droite). Sympathique, non ?
Enfin, comme pour le plugin Trac, j’en ai profité pour déléguer l’ajout des styles à XHTML2ODT lui-même, ce qui simplifie grandement le code. Si vous cherchez à faire un plugin d’export ODT en PHP, le plugin d’export Dotclear est un bon candidat pour chercher l’inspiration.
Vous pouvez télécharger et installer le plugin depuis sa page sur DotAddict.
Flattr
Ça fait plusieurs semaines que j’entends parler de Flattr, ce nouveau service qui veut révolutionner le micro-paiement. Tuxicoman y a même consacré un article assez élogieux. En deux mots, la différence par rapport à PayPal, c’est qu’on affecte avant toute chose un “budget”, c’est à dire une somme fixe d’argent, qui sera distribuée entre les différentes choses pour lesquelles vous aurez cliqué sur le bouton “Flattr”. Son concernés bien évidemment les logiciels (libres ou pas), mais aussi la musique, les vidéos, les écrits, et autres.
À la fin du mois, votre budget mensuel est donc réparti, et si vous n’avez cliqué sur rien il est distribué à des organisation caritatives. Le budget minimum est de deux euros, c’est donc pas la mort. Si vous ne remplissez plus votre compte, il est désactivé temporairement bien sûr.
Le fait d’affecter un budget mensuel fixe, qui partira de toute façon, est à mon avis ce qui fait toute la différence. J’ai décider de me créer un compte pour voir ce que ça donne à l’usage, et pour soutenir les projets qui me plaisent. Bien sûr, j’en ai profité pour enregistrer les projets dont je suis l’auteur, mais que ce soit clair : je ne m’attends pas à rouler sur l’or du jour au lendemain
Toutefois, si mes quelques bouts de code vous plaisent et que vous avez un compte sur Flattr, vous trouverez tous les liens sur mon profil. Les projets de conversion ODT ci-dessus sont normalement tous enregistrés.
À vous les studios
Voilà pour le flash nouveautés concernant mes projets de conversion ODT, j’espère que ces nouvelles versions vous plairont. N’hésitez pas à remonter les bugs sur les trackers associés, que vous pourrez trouve à partir de ma page d’index.Bon, OK, certaines personnes pourraient objecter qu’il y aurait de meilleures façons de passer ses vacances.















Commentaires
vendredi 13 août 2010, 22:39
Oyez oyez, tant qu’on parle d’ODT, je me permet de vous faire savoir que j’ai appris, il y a peu et d’une source fiable, que le ODF n’est ni plus ni moins que le format propriétaire d’OpenOffice.org ! Je ne vous cache pas que quand j’ai lu ça, j’étais sur le c#l. En effet, cette source fiable n’est autre que le Magazine Officiel des Utilisateurs de Microsoft Windows !
Sans rire, ils faudrait vraiment leur signaler, parce que là, c’est grave quand-même…
Sinon, tous ces plugins et utilitaires autour du format ODT sont de bonnes choses !
vendredi 13 août 2010, 22:43
@PaulK : Arf, celle-là elle est bonne. Tant qu’à faire, on peut aussi dire que HTML c’est le format propriétaire du web
samedi 14 août 2010, 01:19
C’est un projet qui semble prometteur, à quand le plugin pour mediawiki ?
samedi 14 août 2010, 08:22
@Liberez le tux : Merci, mais Mediawiki dispose déjà d’un plugin d’export ODT.
Ce que j’aimerais bien voir, c’est un plugin pour WordPress, et un pour Drupal. Pour ce dernier, il y a déjà un projet de plugin d’export qui a commencé, je leur ai proposé d’utiliser XHTML2ODT.
Pour ce qui est de WordPress, rien à l’horizon, mais je préfèrerais que ce soit un utilisateur de WordPress qui le développe. En général je suis assez mauvais pour faire la maintenance de logiciels que je n’utilise pas.
samedi 21 août 2010, 13:54
Salut,
J’essaie d’installer xhtml2odt (ubuntu). Quels sont les dépendances ? Je n’ai pas trouvé de fichier INSTALL dans l’archive.
J’ai pour l’instant installé help2man et python-utidylib, mais j’obtiens toujours l’erreur suivant (xhtml2odt version 1.1) :
make install
mkdir -p /usr/local/share/xhtml2odt /usr/local/bin
cp -pr template.odt xsl styles /usr/local/share/xhtml2odt/
cp: impossible d’évaluer «styles»: Aucun fichier ou dossier de ce type
make: *** install Erreur 1
Merci beaucoup pour votre aide.
samedi 21 août 2010, 18:04
@eusebe : Bonjour ! C’est un oubli de ma part, je suis désolé. À la ligne 11, tu peux supprimer le “styles” entre “xsl” et “$(DESTDIR)”.
Je vais corriger, merci de m’avoir remonté l’info.
samedi 21 août 2010, 18:08
@eusebe : J’oubliais, les dépendances sont différentes selon le script que tu veux utiliser. Dans tous les cas, elles sont spécifiées dans le README.txt, par exemple pour le script python (qui sera installé par le make install), il te faut “python-utidylib”, “python-lxml”, et “python-imaging”.
samedi 21 août 2010, 18:12
@Aurélien : Tant que j’y suis, si tu veux être sûr de la manip’ à faire, voilà le correctif.
samedi 21 août 2010, 20:16
Merci ! J’essaie dès que je rendre chez moi. Désolé pour le README, je suis passé trop vite…
dimanche 22 août 2010, 21:58
Pour info : le correctif fonctionne, et ton programme également (d’ailleurs : waou ! C’est vraiment pratique !)
dimanche 22 août 2010, 22:18
@eusebe : Merci !! Désolé pour le petit bug qui est passé au travers des mailles du filet
mercredi 1 septembre 2010, 14:58
Salut, petit commentaire après utilisation. J’utilise le plugin pour convertir des pages html comprenant beaucoup de tableaux en odt. Cela marche bien, surtout depuis la dernière version (1.2) et son row/col span support.
Le seul véritable manque de mon côté (mais c’est bien sûr relatif : j’ai conscience que tout le monde n’a pas besoin de ça), c’est l’insertion des images. Selon la page officielle :
J’aimerais si c’est possible savoir 2 choses :
- est ce que l’insertion automatique des images est prévue ? Ou leur non insertion est voulue ?
- j’ai du mal à comprendre ce qu’il faut faire pour les rajouter. J’ai décompressé un fichier odt comportant une image et regardé ce qu’il y a dans le fichier content.xml. On trouve bien un élément draw:image, et un lien xlink:href pointant sur un fichier du répertoire Pictures. Dans ce répertoire, j’ai une copie de l’image de mon fichier html. Que faut-il faire pour qu’elle s’affiche dans le document final ? Est-ce automatisable ?
Voilà, vraiment merci pour ce programme et pour l’aide que tu m’as déjà apporté.
mercredi 1 septembre 2010, 15:13
@eusebe : Salut !
Pour l’insertion des images, le script xhtml2odt.py le fait. Il faut juste lui préciser en plus l’URL où tu as récupéré la page HTML, pour qu’il puisse résoudre les liens relatifs. La bibliothèque ne le fait pas elle-même, elle le laisse faire au scripts qui l’utilisent, parce que ça n’est pas possible en XSL pur.
Je suis preneur de tes retours !
mercredi 1 septembre 2010, 15:27
@Aurélien : uhm, pour faire bref, j’utilise un logiciel pour produire des rapports, et ces rapports sont des documents html. Ils sont entièrements locaux à ma machine. J’ai essayé avec -u essai.html ou -u ./essai.html, mais ça n’a pas marché. Y a-t-il une solution ?
mercredi 1 septembre 2010, 15:32
@eusebe : Hmm, ça devrait marcher, tu pourrais m’envoyer ton fichier et les images associées please ?
mercredi 1 septembre 2010, 15:40
@Aurélien : fait (sur au…@bom…org, c’est ça ?)