Je veux manipuler un document Markdown.
Si vous recherchez quelque chose comme ça en Python, il semble courant de convertir Markdown en HTML. Au lieu de cela, si vous souhaitez travailler avec des documents au format Markdown, vous devez pouvoir utiliser quelque chose comme AST. Il n'y avait pas grand-chose en soi, alors j'ai cherché quelque chose qui pourrait être utilisé comme base pour le remodelage.
Manupuler un document Markdown est difficile.
Par exemple, supposons que vous souhaitiez créer une extension oléore (extension nanbuwks) qui insère un modèle spécifique lorsque vous écrivez le commentaire suivant dans la phrase.
[](nanbuwks:template)
Est-il possible de simplement rechercher / remplacer une chaîne de caractères pour le texte Makrdown?
――Non, si cette ligne est incluse dans le bloc de code, vous devez l'ignorer.
\
", mais si vous voyez" \ \
\ ", vous devez l'ignorer. ――Mais si "\
\ \
"est dans \ [] \ (), vous devez l'ignorer.Après tout, vous devez analyser la structure du document markdown pour déterminer si elle peut être considérée comme du texte brut, puis rechercher / remplacer la chaîne de caractères.
Cela ne se limite pas à l'expansion oléore, mais également lors du changement du chemin de l'image, du changement de niveau d'en-tête, du formatage automatique, etc.
・ ・ ・ Comment analyser la structure du document de markdown?
En général, il semble produire Markdown en HTML.
Markdown → Talkerizer → Données de structure du document → Renderer → Sortie au format HTML
Sera. Imaginez ce qui suit.
Comme ça?
--markdown a un niveau de bloc et un niveau de portée --Il existe des jetons de bloc et des jetons d'étendue comme jetons.
Stocker la structure du document examinée par le locuteur dans les données internes Les données de la structure du document ont une structure arborescente
Reconstruisez le document en ajoutant des balises et du texte de contrôle en fonction des données de structure du document. En général, il y a beaucoup de choses pour faire du HTML ici.
Si vous pouvez obtenir les données de structure du document en les liant à la structure de texte Markdown d'origine, vous pouvez agir en vous référant à la structure du document. Mais je n'ai pas pu le trouver. Ensuite, j'ai voulu faire quelque chose comme ça en essayant de modifier l'existant, mais cela semble prendre beaucoup de temps, alors j'ai abandonné cette fois.
Le démarquage peut être régénéré à partir des données et du contexte de la structure du document. Cependant, comme il est basé sur des données abstraites, le document original ne peut pas être entièrement reproduit. N'y a-t-il pas une telle chose parce que ça va? → Cela ne semblait pas être là.
Pouvez-vous obtenir quelque chose comme AST? Il ne semble pas y avoir de sortie sans modifier le code.
(Ajouté le 4 janvier 2020. J'ai trouvé des choses à convertir de Markdown en JSON plus tard. Je n'ai pas examiné les détails, mais cela a peut-être satisfait aux exigences.)
Il semble que Markdown puisse sortir en modifiant le code existant. Est-il facile d'ajouter plus de fonctions si cela peut être fait?
Enquêter avec les exigences suivantes
Python-Markdown
https://github.com/Python-Markdown/markdown Cela ressemble à une bibliothèque standard. Il existe de nombreux plug-ins. Cependant, il ne semble pas être converti en autre chose que du HTML. Par exemple, Markdown-LaTeX semble également convertir la notation Markdown-LaTeXTEX en ligne en Markdown en HTML. J'ai abandonné parce qu'il semble que c'est différent de ce que je veux.
commonmark.py
https://github.com/readthedocs/commonmark.py
Port Commonmark vers Python. La marque commune est faite avec l'idée standard de Markdown. L'implémentation de référence est ci-dessous. https://github.com/commonmark/commonmark.js
En me concentrant sur la pièce de référence, j'abandonne car il semble qu'elle ne convient pas à l'application.
mistune
Le traitement semble être rapide La version2 est sortie le 12/12/2019, mais à partir du 1/1/2019, la 0.8.4 est installée sur Ubuntu pip3. J'ai fait ce qui suit pour installer la dernière version.
$ sudo pip3 install git+https://github.com/lepture/mistune.git
Abandonner faute de documentation
mistletoe
Par défaut, le gui a une sortie vers LaTeX en plus du HTML.
Il semble facile à utiliser, donc je vais essayer de le faire sur cette base.
Celui qui semble bon qui est sorti après avoir examiné les quatre ci-dessus et l'avoir fait avec du gui. Je ne l'ai pas vérifié correctement, mais je saisis une autre occasion.
pycmark
https://github.com/tk0miya/pycmark
Il y a une description selon laquelle "parce qu'il a une extensibilité, une analyse flexible telle que la prise en charge de GFM (GitHub Flavored Markdown) et l'ajout de la notation originale est possible" https://www.papercall.io/speakers/tk0miya/speaker_talks/78833-markdown
marko
https://pypi.org/project/marko/#extend-marko
Among all implementations of Python's markdown parser, it is a common issue that user can't easily extend it to add his own features. une.
Recommended Posts