Ça fait un petite moment (_quelques années _) que je ne viens plus régulièrement sur OpenClassroom
Je reviens avec la présentation d'un projet que je réalise en parallèle de mes études (je redouble une PACES cette année).
J'ai crée cet éditeur pour coller à mon besoin (écrire/éditer rapidement mes cours de fac), tout simplement ! S'il peut être utile à d'autres, tant mieux
Génèse
Au premier semestre de l'année dernière, j'ai passé beaucoup (beaucoup beaucoup) d'heures dans Libre Office à remettre en forme et à éditer des cours que j'avais d'étudiants d'années supérieures, parce que je suis incapable de les comprendre si les phrases ne sont pas parfaitement claires et la présentation consistante.
À partir de ce constat, aux vacances de noël j'ai entrepris de coder un convertisseur de fichier .odt vers markdown pour convertir les cours que j'avais d'étudiants d'années supérieures au format odt en markdown, qui me semblait plus pratique/rapide à modifier.
LaTeX ne me convenait pas car trop long/complexe à rédiger, ça ne m'aurait pas fait gagner de temps.
Il me fallait mettre des formules de maths, la syntaxe des maths de libre office me plaisait bien de par sa simplicité à rédiger. Aucun éditeur markdown à ma connaissance ne permettais d'utiliser cette syntaxe. Je me suis résolu à créer un éditeur (avec prévisualisation intégrée). Étant habitué à utiliser Neovim pour écrire du code, j'ai décidé que j'allais l'utiliser comme éditeur.
Le cahier des charges étant grossièrement esquissé, je me suis lancé dans le code. Vu le peu de temps que j'avais (~10j avant le début du 2ème semestre, il fallait que ça soit opérationnel avant) j'ai fait ce que j'ai pu pour que ça marche. C'était du freestyle, c'était sale, c'était à la demi-journée près, mais ça fonctionnais à la rentrée de janvier
La base de code étant dégueu et mal organisée, j'ai amélioré tout ça pendant les vacances d'été. On rédige maintenant dans l'éditeur comme sur Zeste de savoir, avec quelques petits trucs en plus
Voici une capture d'écran de l'éditeur (il n'a rien de foufou visuellement), vous pouvez cliquer dessus pour l'agrandir :
Résumé des fonctionnalités
Toutes les fonctions supportées par zmarkdown, comme les balises de code, les images, ...
Support des formules de maths avec la syntaxe asciiMath avec $$ et $ comme délimiteurs
Dessin rapide de molécules avec la syntaxe SMILES avec €€ et € comme délimiteurs
Syntaxe de tableau simple et efficace
Neovim comme éditeur, fait gagner beaucoup de temps
Double click sur une image pour la modifier dans Gimp
export HTML & PDF
Testez le !
N'hésitez pas si vous avez un soucis pour l'installer ou pour l'utiliser, je ferais de mon mieux pour essayer de vous aider
Installation
L'éditeur requière Nodejs 14, Neovim, et d'autres dépendances notamment pour faire fonctionner node-gtk
Pour le moment, cela peut ne pas bien fonctionner sur d'autres platformes que Debian/linux, notamment à cause des dépendances. C'est au programme de se séparer des dépendances les plus restrictives.
Usage
Exécutez simplement :
markdown-math-editor file.md
Vous pouvez configurer votre gestionnaire de bureau pour ouvrir tous les fichier .md avec cet éditeur
Je vous conseille également de tester le convertisseur de fichier .odt vers markdown , il est complémentaire à l'utilisation de l'éditeur si comme moi vos sources sont des odt (ou des fichiers word que vous convertissez en odt avec libreoffice)
Côté technique
Pour le côté technique, vu le peu de temps que j'avais (~10j avant le début du 2ème semestre, il fallait que ça soit opérationnel avant) j'ai fait avec ce que je connaissais : Node.js.
J'ai utilisé node-gtk (avec son lot de bugs obscurs ralentissant/complexifiant le développement) pour créer une fenêtre qui intègre un terminal virtuel (à gauche) pour Neovim et un moteur de rendu (WebKitGTK, à droite) pour le rendu. Ce n'était pas prévu au départ, mais ça devient un genre d'electron-like .
Pour la conversion markdown -> html je vais bidouiller (salement) et utiliser remarkJS/UnifiedJS dont j'avais entendu parler. J'utiliserais notamment remark-grid-table issus de zmarkdown le convertisseur utilisé par Zeste de savoir !
Le code était dégueu, au début de l'été j'ai tout repris.
J'ai finis par intégrer zmarkdown et le customiser pour remplacer la syntaxe de math de LateX, par la syntaxe AsciiMath. Ça m'as permis de pas mal nettoyer le code !
J'y ai ajouté quelques customisations :
la possibilité de dessiner rapidement des molécules avec la syntaxe SMILES avec €€ et € comme délimiteurs
Comme il avait été prévu et suggéré, le moteur de rendu est maintenant totalement indépendant de l'éditeur et de l'affichage !
Il a du coup son propre package, ce qui permet de le ré-utiliser plus facilement dans d'autres projets !
Cela va également permettre la mise en place de tests unitaires dans le futur
J'en ai profité pour ajouter 2 micro-fonctions (plutôt remettre des fonctions que je n'avais pas recodé depuis le passage à zmarkdown :-°) :
![]() qui permet de d'aller après une image
Si vous avec une image qui fait 50% de large, et un paragraphe qui suit, le paragraphe va être à droite de l'image. Si vous ne voulez pas ça, en insérant ![]() avant le paragraphe, celui-ci descendra sous l'image
<------------> (avec au moins 5 -) affiche une ligne pointillée dans le rendu, et permet d'indiquer où couper à l'impression (pour l'export pdf)
En fait ça ne coupe pas pour le moment....mais je n'ai pas le temps d'investiguer ce soir, donc pour le moment ça fait uniquement une ligne pointillée
Du coup ça modifie (légèrement) le shéma de la stack technique :
Tu devrais faire une page de démo pour qu'on puisse rapidement se faire une idée. Là je t'avoue que j'ai même pas eu le courage d'ouvrir mon invite de commandes
https://github.com/Drulac/markdown-math-editor
https://github.com/Drulac/markdown-math-editor