Bon anniversaire txt2tags !

Posté par . Modéré par Nÿco.
Tags :
5
18
août
2008
Technologie
Txt2tags est un générateur de documents et un pré-processeur de texte, écrit par Aurélio Marinho Jargas.

Il vient de passer en fin de mois dernier à la version 2.5, et en a profité pour fêter par la même occasion ses sept ans d'existence, tout en gardant continuellement à l'esprit le fameux KISS-principe de ses débuts : simple, mais non limité.

Les grandes nouveautés sont :
  • le support de l'exportation vers les syntaxes Mediawiki, Google Code Wiki et Dokuwiki
  • une nouvelle interface PHP permettant d'utiliser du code txt2tags dans un navigateur (cas d'un intranet par exemple, ou sur un serveur internet utilisant Python)
  • ajout des hyperliens locaux pour LaTeX (ancres)
  • meilleur support de l'UTF-8
  • quelques nouveaux outils optionnels (greffon NanoBlogger, script Python pour générer des sites etc.)
Pour présenter Txt2tags, on dira qu'il utilise un langage de balisage léger, facilement extensible, permettant d'exporter vers de nombreux formats populaires :

Ainsi dans les utilisations possibles de txt2tags, on trouve la génération de pages internet statiques (et valides W3C), mais également la possibilité de générer des pages PHP, la création d'articles ou de livres en LaTeX destinés à être imprimés, des documentations devant être converties dans divers formats...

Multiplateforme, de part son code composé d'un unique script python, il a également été empaqueté pour de nombreuses distributions Linux, pour Mac OS X, et pour Windows, ce qui permet de l'installer rapidement au coeur de son ordinateur.

Ses principaux avantages sont :
  • sa syntaxe simple et dépouillée, de type wiki
  • son système de macros qui peut lever n'importe quelle limitation de la syntaxe initiale et l'étendre quasiment à l'infini
  • la possibilité d'ajouter de nouveaux formats d'exportation à la liste déjà grande des formats supportés

Au niveau de la syntaxe, les balises de bases sont :

**gras**
//italique//
__soulignage__
--barré--
= titre = (à différents niveaux)
- liste
+ liste numérotée
``code``
[image.jpg]
[lien www.site.com]
| table |

Cela peut sembler relativement peu, mais tout ceci permettra de répondre à la plupart des besoins des textes formatés courants.

En ce qui concerne le système de macros, il se compose d'un pré-processeur et d'un post-processeur qui pourront remplacer les parties de code que l'on souhaite, y compris en utilisant des expressions régulières (Aurélio étant par ailleurs spécialiste de la question, il a écrit un livre sur les expressions régulières, et le logiciel txt2regex).

Par exemple des fonctions avancées d'inclusion d'images avec LaTeX ne sont pas prises en compte dans txt2tags. Mais si on veut entourer une image avec du texte, il est possible d'ajouter dans le fichier cette macro :
%!postproc(tex): 'wrap=([^ ].*?)=wrap' '\\begin{wrapfigure}{l}{0\\textwidth} \\vspace{-00mm} \1 \\vspace{-00mm} \\end{wrapfigure} '

ce qui aura pour effet de remplacer toutes les occurences de wrap=[image.jpg]=wrap par \begin{wrapfigure}{l}{0\textwidth} \vspace{-00mm} \includegraphics[height=4cm]{image.jpg} \vspace{-00mm} \end{wrapfigure}

(on vient ainsi d'inventer la convention wrap= =wrap, mais on aurait pu créer n'importe quelle autre syntaxe similaire)

Enfin, pour l'extensibilité des nouveaux formats, des explications détaillées figurent sur le site. On pourrait ainsi imaginer avoir dans le futur le format phpBB, Markdown, etc., favorisant ainsi l'interopérabilité entre les nombreux balisages existants.

Parmi les nombreux outils existants, on pourra citer des colorations syntaxiques pour vim, emacs, kate, gedit..., un module Apache pour la conversion à la volée en HTML, une interface KDE, des scripts shell ou Ruby, un module pour Openoffice.org, un script vim permettant de convertir du HTML en txt2tags etc.

Saluons aussi la sympathie de l'auteur Aurélio, qui n'est pas avare de bons conseils et d'explications détaillées pour aider les utilisateurs qui le contactent !
  • # Fond, forme?

    Posté par . Évalué à 8.

    Toujours intéressant de découvrir un nouvel outil, mais je me demande:

    - les balises de base, comme tu dis, vont à l'encontre de la tendance générale: on voit de l'italique, du gras, du souligné au lieu de emphase, etc.

    - les extensions ont l'air souples et puissantes, mais à vouloir garder une base la plus simple possible et encourager les extensions, on risque de perdre en compatibilité: avoir 12 extensions qui font la même chose et demandent toutes une syntaxe différente

    Enfin, d'un point de vue général et sans vouloir le moins du monde dénigrer le travail de l'auteur, développer un énième processeur de texte doté d'une nouvelle syntaxe à apprendre était-il vraiment plus judicieux que de choisir une des cibles d'exportation et développer les convertisseurs manquants? (encore que, je n'ai pas testé, mais si les résultats sont bons, il suffit désormais de développer des convertisseurs inverses ([n'importe quel autre-2-txt2tags]) pour avoir une boîte à outil de conversion universelle...)
    • [^] # Re: Fond, forme?

      Posté par . Évalué à 10.

      Remarques pertinentes. Je vais essayer d'y répondre par rapport à l'usage que je fais de cet outil :

      - dans l'idée de "keep it simple" pour la plupart des utilisateurs, les "balises de base" sont peut-être plus simple à appréhender si on dit "italique" que "emphase". Ensuite, en choisissant l'export sgml, on obtient justement le rendu avec la structure logique au lieu des symboles gras italique etc.

      Tu peux essayer http://txt2tags.sourceforge.net/online.php pour t'en rendre compte.

      D'ailleurs, les formats ciblés ne sont pas forcément tous axés sur le web, par exemple je ne sais pas si le format des pages de man permet autre chose que "bold" et "italic".

      En tout cas même en restant en html ou xhtml, si tu préfères avoir en sortie <em> à la place de <i> et <strong> à la place de <b>, tu peux simplement ajouter cela à la source, ou dans un fichier de configuration externe :

      %!postproc: '<i>' '<em>'
      %!postproc: '</i>' '</em>'
      %!postproc: '<b>' '<strong>'
      %!postproc: '</b>' '</strong>'

      sur le même modèle on peut même faire :
      %!postproc: '<u>' '<span class="underline">'


      - pour la possibilité d'étendre la syntaxe de base, justement, ce ne sont pas vraiment des extensions destinées à être échangées avec d'autres utilisateurs, avec l'optique "cette extension permet d'ajouter le support php à txt2tags". Dans le cas d'un site internet, un fichier de configuration spécifique se fera selon les besoins du site, pour du LaTeX, la configuration sera de même selon le type de sortie voulue.

      En général ses extensions personnelles sont facilement réutilisables pour soi-même, au pire des cas si on les publies avec la source txt2tags, n'importe qui pourra continuer à travailler sur cette source.

      Par exemple j'avais un jour rédigé un tutoriel destiné à un forum en phpBB, au début je l'avais écrit en txt2tags, puis j'avais utilisé une macro pour l'exporter en "code BB". Mais ayant modifié plusieurs fois ce tutoriel sur le forum même, c'était trop fastidieux de convertir à chaque fois la source en bb code avant chaque mise à jour.

      Aussi j'ai donc fait l'inverse, j'ai archivé le code bb issu de mes dernières modifications du forum phpBB, et l'ai stocké dans mon code txt2tags en utilisant cette fois le préprocesseur, ce qui a permis d'utiliser ce code BB directement sur une copie du tutoriel pour mon site. Ce n'est pas très compliqué, juste ces 3 lignes ont fait l'affaire :

      %!preproc: '\[b\]([^ ].*?)\[/b\]' '**\1**'
      %!preproc: '\[u\]([^ ].*?)\[/u\]' '__\1__'
      %!preproc: '\[i\]([^ ].*?)\[/i\]' '//\1//'

      cela remplace simplement le code BB par la syntaxe txt2tags, ce qui permet ensuite de l'exporter en html, en LaTeX, en mediawiki ou même en page de man.

      ([^ ].*?) cela veut dire : remplace les 2 limites (ici [/b] dans le cas de la première ligne) entourant n'importe quel texte par des **, et \1 c'est le texte réinséré tel quel entre les nouvelles balises. Avec le \ d'échappement avant les crochets, je reconnais que ce n'est pas très lisible au final, mais bon c'est juste pour la configuration.

      Je voulais faire cela pour à la fois archiver mon travail, et pouvoir le réutiliser sur mon site. (j'ai bien fait car le forum a eu des problèmes et a perdu plusieurs fois ce tutoriel que j'ai pu remettre en place facilement). Si le site propose un jour un mediawiki pour présenter les tutoriels, je pourrais réutiliser txt2tags pour l'exporter en mediawiki au lieu de bêtement refaire tout le formatage à la main.


      - Cette "nouvelle" syntaxe existe depuis 7 ans, c'est plus vieux que mediawiki et dokuwiki ! ;)
      Effectivement, il existait d'autres styles de formatage (markdown) ou de wiki à la même époque, mais je présume que l'auteur aimait moins leurs syntaxes.
      Ici on peut voir les différences :
      http://en.wikipedia.org/wiki/List_of_lightweight_markup_languages

      Perso je trouve cela plus logique et cohérent que la plupart des autres, ainsi toutes les balises sont entourées de 2 symboles, contrairement à par exemple markdown qui a : __bold text__ et _italic text_ (mediawiki reprend ce type de chose avec les apostrophes, j'hésite toujours entre les 2 d'ailleurs, de toute façon c'est moins "parlant").
      AFT (almost free text) utilise _bold text_ et ''italic text''.

      (note : c'est bien mediawiki, et non pas "wiki[b]m[/b]edia" comme j'ai écrit à un endroit de la dépêche)

      Pour les autres cibles d'exportation (html, LaTeX), justement l'auteur a développé txt2tags parce qu'il les trouve imbuvables !

      Effectivement, je préfère utiliser des outils de conversions inverses, pour utiliser txt2tags de façon plus "universelle". Il existe un convertisseur html vers txt2tags (un plugin vim), le résultat n'est pas parfait, mais cela permet de récupérer un site en html vers txt2tags, en retravaillant un peu le code. Pour les autres marquages type wiki, cela devrait être plus simple (cf. l'explication pour BB code plus haut)

      Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

  • # Scenari

    Posté par . Évalué à 2.

    C'est un peu méchant, mais je me demande ce qui est couvert par scenari[1] qui n'est pas couvert par txt2tag ...

    (Plus sérieusement, les outils à associer qui permettrait d'avoir quelque chose d'équivalent, on ne peut qu'intégrer des images? pas de vidéos ou de sorties odf?).

    [1] http://scenari-platform.org/
    • [^] # Re: Scenari

      Posté par (page perso) . Évalué à 6.

      Réponse : la simplicité.

      Je ne connais pas bien scenari. Ça a l'air puissant, mais le source est du XML, il faut donc un éditeur lourd (sans être péjoratif) et un bon gros logiciel pour faire les conversions.

      Txt2tags, c'est un fichiers texte, lisible dans son format source, et convertible avec une bête commande.
      Je l'utilise dès que je veux prendre des notes, rédiger une note, un rapport, ou un petit document. La plupart du temps, je n'utilise l'export que pour envoyer mon document à quelqu'un d'autre, ou le publier sur le web. Sinon, je conserve mes notes au format t2t.

      Txt2tags fait pas le café, mais il reste et restera très simple, et ça, c'est rudement pratique pour pas mal de choses.
      • [^] # Re: Scenari

        Posté par . Évalué à 4.

        Petit quiproquo :)

        La question n'était pas ce que txt2tag avait de plus.
        Mais ce que scenari avait de plus justement ^_^

        (parce que à part intégrer des vidéos et générer de l'odf, vu comment c'est fichu, j'ai l'impression que dans sa simplicité txt2tag est d'une puissance redoutable pour pas mal de cas d'utilisation).
        • [^] # Re: Scenari

          Posté par . Évalué à 4.

          je ne connais pas Scenari, mais je serais tenté de répondre comme Nicolas : txt2tags est très simple (cf. philosophie KISS), Scenari semble beaucoup plus complexe. De plus on lit sur le site de scenari : "Scenari est une suite logicielle libre de conception et d'utilisation de chaînes éditoriales pour la création de documents multimédia.". Chaîne éditoriale ? Documents multimedia ? J'ai l'impression que ce n'est pas le même public visé, ni le même créneau. Dans le cas où on a beaucoup d'intervenants dans un processus de production, un fichier txt à se trimballer, cela ne sera peut-être pas forcément pratique (après cela peut dépendre de l'organisation interne).

          Pour ta question initiale, pour "intégrer des vidéos", cela sera pareil que des images : txt2tags n'est pas un conteneur, le fichier sera externe. Si ton document final peut gérer le multimédia (son, video), il est possible que txt2tags puisse en faire qque chose. Tu peux créer une macro qui inclura ta video suivant tes besoins. Par exemple tu demanderas à remplacer la séquence @@video@ma_video.ogg@ par <embed src=" etc...
          Quand firefox permettra d'inclure directement la vidéo avec la balise <video>, tu pourras même remplacer une ligne de ton fichier de configuration et au lieu de générer un <embed... cela générera un <video> pour tous tes fichiers.

          Si on reste dans l'exemple du html, sur un site on a des jeux lus par un plugin java, chaque page de jeu est de type :


          %!preproc: 'N°REF' '008'

          @@APPLETJEU@@N°REF
          /.../ (avec les présentations etc)

          et dans mon fichier de conf j'ai cette ligne qui se charge de tout remplacer comme il faut :


          %!postproc: '@@APPLETJEU@@(\d+)' Pour jouer via l'applet java, <a href='index.php?id=jeujava&amp;j=\1&amp;fore=black&amp;back=white'>cliquez ici</a>.

          (bien entendu j'ai un autre fichier qui se charge d'avoir la liste des numéros avec le fichier à importer, mais ça cela n'est plus du ressort de txt2tags mais c'est php)

          Comme cela chaque fichier de jeu est propre et clair, on n'a pas à se prendre la tête avec du code html / php à rallonge)


          Pour l'odf, voir plus bas.

          Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

  • # Autres lightweight markups

    Posté par . Évalué à 4.

    Rappelons aussi d'autres en:lightweight_markup_languages notables : reStructuredText (utilisé pour la documentation du langage Python) (permet de générer des sites avec menus automatiques grâce à rest2web[1]) et ses dérivés comme asciidoc[2] (pour générer du docbook, de la manpage, etc.) (un exemple de asciidoc : http://www.methods.co.nz/asciidoc/a2x.1.txt produit http://www.methods.co.nz/asciidoc/a2x.1.html )

    [1] http://www.voidspace.org.uk/python/rest2web/
    [2] http://www.methods.co.nz/asciidoc/
  • # Export ODF

    Posté par (page perso) . Évalué à 2.

    C'est prévu ? Pour moi, ca rendrait vraiment l'outil super intéressant.
    • [^] # Re: Export ODF

      Posté par . Évalué à 2.

      à priori ce n'est pas prévu, mais cela semble un peu compliqué comme ça (le format odf étant du xml il me semble un peu verbeux, et zippé). Peut-être qu'il serait plus simple de trouver un convertisseur d'un des formats exportés (html ou latex par exemple) qui puisse déjà générer du odf correct. Unoconv pourrait peut-être faire ça ?

      Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.