On m'a demandé de créer un manuel produit avec un mécanisme similaire à une version simplifiée d'O'Reilly Atlas. Je voulais utiliser Ascii doctor pour créer le manuel, j'ai donc décidé de l'écrire au format AsciiDoc, mais il était plus facile de m'habituer au format Markdown, j'ai donc dû passer du format Markdown au format AsciiDoc. C'était. Je pensais que je pouvais me permettre d'utiliser pandoc, mais je ne pouvais pas convertir comme je l'avais prévu.
Si vous utilisez pandoc, vous devriez étudier Haskell et le corriger, mais je n'ai pas le temps, alors je me suis demandé si je pouvais créer un programme de conversion en utilisant la bibliothèque d'analyseurs Markdown de Python.
Le tableau est le suivant.
Élément d'évaluation | Python-Markdown | Misaka | Mistune |
---|---|---|---|
URL | https://github.com/waylan/Python-Markdown | https://github.com/FSX/misaka | https://github.com/lepture/mistune |
Licence | BSD | MIT | BSD |
la mise en oeuvre | python | python + C | python |
Version correspondante | Python 2.7, 3.3+ and PyPy | Python 2.7, 3.2+ and PyPy 2.6 | Python 2.6+, Python 3.3+ and PyPy |
Sortie personnalisée | × | ◯ | ◯ |
Remarques | Dépend de Hoedown |
Python-Markdown est un chemin car la sortie ne peut pas être personnalisée. Misaka semble mort, mais c'est une passe parce que cela dépend de Hoedown.
J'ai choisi Mistune par la méthode d'élimination, donc je vais l'implémenter en utilisant ceci.
Il semble fonctionner avec Python 2.6 ou supérieur, j'ai donc confirmé l'opération avec 2.7.11.
pip install mistune
C'est facile!
Nous avons préparé les fichiers et sources au format Markdown suivants pour la conversion HTML. C'est presque la même chose que ce qui est écrit dans l'utilisation de base officielle.
test.md
#Exemple de documentation
##Chapitre XX
###Section XXX
convert.py
import mistune
with open('test.md', 'r') as test_file:
markdown = mistune.Markdown()
print markdown(test_file.read())
Et exécutez-le.
python convert.py
Ensuite, le résultat de sortie est le suivant.
output
<h1>Exemple de documentation</h1>
<h2>Chapitre XX</h2>
<h3>Section XXX</h3>
Puisqu'il est partiellement appliqué, il semble bon de préparer un modèle séparément de la définition HTML, etc. et de faire comme s'il ne réécrivait que le contenu du corps.
Maintenant le sujet principal.
Il semble que mal réglé hérite de la classe Renderer et remplace l'élément (méthode) que vous souhaitez afficher. Cette fois, je veux remplacer la balise de titre par Section au format AsciiDoc, donc je l'ai fait comme suit.
custom_render.py
import mistune
class CustomRenderer(mistune.Renderer):
def header(self, text, level, raw=None):
section = '=' * level
return '{0} {1}\n'.format(section, text)
if __name__ == '__main__':
custom_renderer = CustomRenderer()
with open('test.md', 'r') as test_file:
markdown = mistune.Markdown(renderer=custom_renderer)
print markdown(test_file.read())
Je le ferai.
python custom_render.py
Le résultat est le suivant.
output
=Exemple de documentation
==Chapitre XX
===Section XXX
J'ai eu les résultats que j'attendais!
Après cela, vous pouvez convertir le format en remplaçant la méthode de la syntaxe requise et en ajustant le format de sortie.
Recommended Posts