--- title: MarkIt author: Jean-Luc JOULIN date: 08/01/2021 20:52:00 tags: MarkIt, Presentation, LaTeX, Markdown, ReST, Markup, HTML, ODT, XML, Article, Rapport docref: MarkIt abstract: Présentation du prototype de langage de marquage **MarkIt** en cours de développement depuis Février 2019. --- Problématique ############# Lors de ma dernière mission chez EDF à Lyon, j'ai été amené à travailler sur un projet de génération automatique de notes de calcul. Ce projet avait pour but de programmer avec **Python** une interface pour générer des notes de calcul de neutronique en utilisant @[https://pandoc.org/](**Pandoc**) ou @[http://www.sphinx-doc.org/](**Sphinx**) pour créer les documents. Après un travail de recherche sur les fonctionnalités de ces programmes et de développement en Python j'en suis arrivé à un bilan plutôt mitigé sur la possibilité de générer des documents de qualités avec ces outils. Les raisons en sont multiples: * **Python** est un langage de scripte qui n'est absolument pas adapté pour des projets de grande ampleur nécessitant des modifications régulières sur le long terme. * Le typage dynamique empêche le développeur de détecter les erreurs pendant la phase de développement. Les bugs n'apparaissent que pendant l'utilisation du programme. * Le fonctionnement en mode interprété donne globalement de mauvaise performances. * **Sphinx** est un outil dédié à la génération de documentation pour Python et absolument pas pour produire de la documentation technique à caractère scientifique. * Les langages de marquage **Markdown** et **ReST** ont beaucoup de lacunes au niveau de leurs fonctionnalités. Certaines améliorations ont été apportées par **Pandoc** et **Sphinx** pour palier à ces manques mais pas de manière satisfaisante et pas de façon officielle. * Ces outils sont destinés au départ à des informaticiens et pas à des ingénieurs en mécanique/neutronique. Projet ###### Fort de ces constats, j'ai commencé en février 2019 à réfléchir à un langage de marquage qui serait dédié aux notes à caractère scientifique et qui supporterait toutes les fonctionnalités manquantes de **Markdown** et **ReST**. Parmi ces fonctionnalités, il devra y avoir: * La possibilité d'utiliser tous les styles d'écriture possibles. * **Gras**. * *Italique*. * __Souligné__. * ~~Barré~~. * ^Exposant^. * _Indice_. * Création de liens et de renvois vers différentes sections du document. * Création de tableaux avec la possibilité de définir la taille et l'alignement des colonnes. * Création de formules mathématiques avec un langage dédié. * Insertion simple d'images et de figures avec la possibilité de définir la taille des images. Le fonctionnement de ce programme sera globalement le même que celui de **LaTeX**. L'utilisateur se concentrera sur le fond du document (contenu) et non sur la forme (apparence). L'apparence du document pourra être modifiée lors de la compilation afin de produire des documents avec différents rendus. Le programme principal devra être capable d'effectuer les tâches suivantes: * Analyse du document sous forme d'un code source. * Vérification de la cohérence du code. * Compilation du document sous différents formats. * HTML (Pour diffuser le document sur internet). * Open Document (Le format de Libre Office). * LaTeX (Pour pouvoir compiler le document avec **LaTeX** ou **XeTeX**) Développement ############# Bien évidemment, j'ai commencé le développement avec **Haskell** afin d'avoir un programme fiable et facile à faire évoluer. Parti de rien en Mars 2018, avec une phase d'analyse de faisabilité et de mise au point assez longue durant l'année 2018^[autres-projets], le développement a beaucoup progressé en 2019/2020 pour accélérer encore en 2021. [autres-projets]^ Je travaillais sur d'autres sujets en parallèle et la phase de définition du langage a pris plus de temps que prévu. ```{language=verb-html} ``` La plupart des fonctionnalités sont implémentées et **MarkIt** est déjà capable de produire des documents au format **HTML**, **LaTeX** et **ODT** (Open Document). Il est désormais possible de générer des articles, des rapports, des livres et avec quelques modifications l'ensemble de mon site internet. Le fonctionnement global du programme est présenté dans les schémas ci-dessous : ![Schéma fonctionnement.svg](Markit, Fonctionnement, Markup, HTML, ODT, LaTeX) ![Schéma fonctionnement (Avec explications).svg](Markit, Fonctionnement, Markup, HTML, ODT, LaTeX) ![Schéma structure.svg](Markit, Block, Inline, Math, Paragraph) ![Schéma structure (Avec explications).svg](Markit, Block, Inline, Math, Paragraph) Ci-dessous, quelques documents générés avec **MarkIt** : // * L'article de présentation (en anglais) du langage de marquage **MarkIt** et les fonctionnalités // @[introduction-to-markit-fr-v03](MarkIt Introduction) * L'article de présentation (en français) du langage de marquage **MarkIt** et les fonctionnalités: @[introduction-to-markit-fr-v03](Introduction à **MarkIt**) * L'article de présentation (en anglais) des fonctionnalités mathématiques de **MarkIt**: @[math-formulas-test-v02](Test of mathematic formulas with **MarkIt**) * L'article qui avait été publié en 2005 dans le cadre mon projet de fin d'étude: @[file-publication-orig-html](Publication DIPI 2005) * Le même article au format ODT: @[file-publication-orig-odt](Publication DIPI 2005 ODT) * Mon rapport de fin de période industrielle effectuée chez SULLAIR Europe en 2003: @[rapport-stage-sullair](Rapport stage SULLAIR 2003) * Le même rapport au format ODT: @[file-rapport-sullair-orig-odt](Rapport stage SULLAIR 2003 ODT)