Clone de Pandoc en Haskell : parseur/convertisseur de documents entre formats XML, JSON et Markdown.
Telecharger & tester
make && ./mypandoc -i fichier -f format_sortie [-o fichier_sortie] (convertisseur de documents XML/JSON/Markdown vers XML/JSON/Markdown/PDF)
mypandoc est un projet Epitech (Tek2, groupe de 2-4) qui consiste a ecrire en Haskell une version simplifiee de Pandoc, un convertisseur de documents. Le programme lit un document dans un format donne et le restitue dans un autre format, sans jamais alterer l'information qu'il contient : seule sa representation textuelle change.
Un document est modelise par une structure interne unique, independante des formats d'entree et de sortie : un en-tete (titre obligatoire, auteur et date optionnels) et un corps compose de texte, de mises en forme (italique, gras, code), de liens, d'images, et d'elements structurels (paragraphes, sections, blocs de code, listes et items). Les trois formats geres, XML, JSON et Markdown, ne sont que des serialisations differentes de cette meme structure.
Le coeur technique du projet est l'obligation d'implementer sa propre bibliotheque de parsing (parser combinators) en Haskell, sans recourir a aucune librairie de parsing externe : c'est cette bibliotheque, ecrite a la main, qui sert ensuite a construire les parseurs XML et JSON (obligatoires en entree) et Markdown (en bonus), chacun transformant le fichier source en Document interne avant sa reserialisation dans le format de sortie demande.
Le programme s'invoque avec -i (fichier d'entree, obligatoire), -f (format de sortie, obligatoire), -o (fichier de sortie, optionnel, sinon sortie standard) et -e (format d'entree, optionnel, sinon detection automatique). Toute option invalide ou manquante fait echouer le programme avec un message d'usage et le code de retour 84.
La compilation repose sur Stack (version 2.1.3 minimum, resolver LTS-23), avec un fichier package.yaml genere via hpack et un Makefile qui encapsule stack build. Les seules dependances autorisees pour la bibliotheque et l'executable sont base, optparse-applicative et containers, ce qui force a ecrire soi-meme toute la logique de parsing et de manipulation du graphe de document.
Projet suivant
