Carnet Wiki

Intégrer le contenu d’un fichier markdown dans un article

Version 4 — Novembre 2014 tcharlss

En 2 mots : dans un texte, une balise <embxx> faisant référence à un fichier markdown ( externe ou non ) va intégrer le texte mis en formeet tout . Magique !

----

Sur une idée de Suske qui a partagé [partagé une astuce pour [intégrer le contenu d’un fichier texte externe dans un article->http://seenthis astuce->http://seenthis .net/messages/263875] pour intégrer le contenu de fichiers .txt dans le texte des articles , voyons voir comment faire pour bénéficier en plus de la mise en forme quand il s’agit d’un fichier même chose mais avec des fichiers [markdown->https://fr.wikipedia.org/wiki/Markdown ].
org/wiki/Markdown] , tout en bénéficiant de leur mise en forme.
Pour L’intention , c’est de pouvoir ajouter , dans les articles documentant les plugins, ça permettrait d’incorporer de façon transparente des README.md, des TODO.md ou des CHANGELOG.md externes et qui soient automatiquement tenus à jour.

Attention, il ne s’agit pas d’un tutoriel de notes en cours , mais et en l’état ça tient un peu de mes notes pour faire marcher le schmilblik la bidouille .
Ce n’est peut-être pas la meilleur façon de faire, il y a peut-être des erreurs : n’hésitez pas à commenter et à corriger.

1- Plugin Markdown

Il faut déjà installer le plugin markdown pour SPIP. Il est sur la zone, mais il n’est pas référencé dans les dépôts, il faut donc le récupérer par SVN ou autre : http://zone.spip.org/trac/spip-zone/browser/_plugins_/markdown

2 3 - Modèle <emb> pour les fichiers markdown

Maintenant, il nous faut une variante du modèle emb.html (du plugin Médias) qui sera utilisé automatiquement pour les fichiers markdown. Le modèle de base cherche des variantes de la forme emb_{extension}.html, on va donc créer un nouveau squelette nommé emb_md.html.
Où placer ce squelette ? Logiquement il aurait sa place dans le plugin Markdwon me semble-t-il, mais pour les tests, le dossier des squelettes fera l’affaire.

Dans notre squelette, #FICHIER|contenu_document (ou #ID_DOCUMENT|contenu_document) récupère le contenu du fichier texte.
Enfin, il ne reste plus qu’à ajouter un modèle pour que la balise <emb> fonctionne avec les fichiers markdown.
html.
Ensuite , il Il faut faire en sorte de placer le texte récupéré entre du fichier dans des balise <span class="base64mdblocs" title="PG1kPi4uLjwvbWQ+"></span>&lt;/code>, au moyen du > pour que le texte soit parsé , donc on va utiliser le filtre <code>|wrap{<md>}. Ainsi , il sera pris en compte par le parseur markdown Le squelette doit s’appeler < code>emb_md .
Après ça, un coup de |propre et le tour est joué.
Ce qui donne au final, en ne gardant que l’essentiel :

<BOUCLE_tous (DOCUMENTS types_documents) {id_document=#ID} {tout}
>[(#FICHIER|contenu_document{#ENV{charset,auto}}|wrap{'<md>'}|propre)]</BOUCLE_tous>

3 2 - Plugin Médias

Il reste un dernier problème à régler  : pour Pour l’instant le plugin Médias ne reconnaît pas l’extension .md, par défaut il identifiera ces fichiers comme étant des .m3u (liste de lecture MP3), ce qui va tout fausser . ).

Ajoutons Il faut donc rajouter cette extension dans la table spip_documents_types. C’est notamment là qu’on indique qu’il s’agit d’un type de document qu’on peut intégrer dans le texte, ce qui va nous permettre d’utiliser la balise <emb>.Ajoutez une ligne avec les valeurs ci-dessous :

spip_documents_types
extension titre descriptif mime_type inclus upload media_defaut
md Markdown texte/plain embed oui file

À noter également le fichier base/typedoc.php qui liste les différents types de fichiers, mais j’ignore son utilité et il ne semble pas avoir d’incidence sur notre problème.


Voilà, à partir de là ça devrait marcher.
Par exemple en prenant les fichiers de tests du plugin markdown en documents joints externes :