Pages

lundi 24 mars 2014

Interpréter le markdown dans une application Java

Le Markdown est un langage de balisage inventé par John Gruber permettant de simplifier la mise en forme d'un texte saisi dans une page web, sur une tablette ou un téléphone. Ce langage est aujourd'hui interprété par un grand nombre d'applications ou de sites. Par exemple si vous utilisez github le markdown permet de formater un readme ou d'autres pages afin de fournir une documentation simple et rapide. Il n'existe pas une manière de faire du markdown car son créateur a été assez coulant sur les différentes évolutions que chacun à fait de son côté => le markdown est parfois rangé dans la catégorie des abandonwares.


Le but de cet article est de parler de la librairie txtmark mais pour ceux qui ne connaissent pas je vais commencer par un petit rappel

Le langage Markdown

Voici un exemple simple pour comprendre la syntaxe Markdown.

Heading
=======

Sub-heading
-----------
 
Paragraphs are separated by a blank line.
 
Text attributes *italic*, **bold**, `monospace`. A [link](http://javamind-fr.blogspot.fr/).
 
Blog category list:
 
   * java
   * android
   * agile method

Une fois que le texte est saisi il peut être stocké sous la même forme. A la restitution il est parfois préférable de le convertir en HTML comme ci dessous. C'est à cette étape qu'une librairie existante vous sera utile.

<h1>Heading</h1> 
<h2>Sub-heading</h2> 
<p>Paragraphs are separated by a blank line.</p> 
<p>Text attributes <em>italic</em>, <strong>bold</strong>, <code>monospace</code>.</p> 

<p>A <a href="http://javamind-fr.blogspot.fr">link</a>.</p> 

<p>Blog category list:</p> 
<ul> 
<li>java</li> 
<li>android</li> 
<li>agile method</li> 
</ul>

Pour plus d'informations vous pouvez vous référer au site de John Gruber.

Un exemple de librairie
Dans le cadre de la mise à jour de mon application android pour Mixit 2014 j'ai du trouver une librairie assez simple, légère et rapide à embarquer. J'en ai testé plusieurs avant de tomber sur  txtmark. A chaque fois j'étais tombé sur plusieurs problèmes

  • lenteur 
  • profondeur des dépendances. X lib associée à récupérer pour effectuer la conversion...
  • complexité
  • ...

Pour intégrer la librairie à votre projet si vous utilisez Gradle

compile 'com.github.rjeschke:txtmark:0.11'

Pour Maven

<dependency>
    <groupId>com.github.rjeschke</groupId>
    <artifactId>txtmark</artifactId>
    <version>0.11</version>
</dependency>

Après au niveau de votre code vous devez simplement appeler le com.github.rjeschke.txtmark.Processor. Par exemple ici je met à jour un TextField Android

TextView mytext = (TextView) row.findViewById(R.id.link_text);
mytext.setText(Html.fromHtml(Processor.process(membre.getDescription())), TextView.BufferType.SPANNABLE);

Voila rien de plus à dire sur le sujet... Je vous conseille de lire la page Github liée au projet si vous voulez ajouter des options pour interpréter plus que la syntaxe Markdown. Sur les tests de performance l'auteur indique plusieurs comparaisons avec des outils existants

Aucun commentaire:

Enregistrer un commentaire

Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.