Ich wurde gebeten, ein Produkthandbuch mit einem Mechanismus zu erstellen, der einer vereinfachten Version von O'Reilly Atlas ähnelt. Ich wollte Ascii Doctor verwenden, um das Handbuch zu erstellen, deshalb habe ich beschlossen, es im AsciiDoc-Format zu schreiben, aber es war einfacher, mich an das Markdown-Format zu gewöhnen, sodass ich vom Markdown-Format in das AsciiDoc-Format konvertieren musste. Es war. Ich dachte, ich könnte es mir leisten, Pandoc zu verwenden, aber ich konnte nicht so konvertieren, wie ich es beabsichtigt hatte.
Wenn Sie Pandoc verwenden, sollten Sie Haskell studieren und das Problem beheben, aber ich habe keine Zeit. Daher habe ich mich gefragt, ob ich mit der Markdown-Parser-Bibliothek von Python ein Konvertierungsprogramm erstellen kann.
Die Tabelle ist wie folgt.
Bewertungsgegenstand | Python-Markdown | Misaka | Mistune |
---|---|---|---|
URL | https://github.com/waylan/Python-Markdown | https://github.com/FSX/misaka | https://github.com/lepture/mistune |
Lizenz | BSD | MIT | BSD |
Implementierung | python | python + C | python |
Entsprechende Version | Python 2.7, 3.3+ and PyPy | Python 2.7, 3.2+ and PyPy 2.6 | Python 2.6+, Python 3.3+ and PyPy |
Benutzerdefinierte Ausgabe | × | ◯ | ◯ |
Bemerkungen | Kommt auf Hoedown an |
Python-Markdown ist ein Pfad, da die Ausgabe nicht angepasst werden kann. Misaka scheint tot zu sein, aber es ist ein Pass, weil es von Hoedown abhängt.
Ich habe mich für Mistune durch die Eliminierungsmethode entschieden, daher werde ich es mit dieser implementieren.
Es scheint mit Python 2.6 oder höher zu funktionieren, daher habe ich den Vorgang mit 2.7.11 bestätigt.
pip install mistune
Es ist einfach!
Wir haben die folgenden Dateien und Quellen im Markdown-Format für die HTML-Konvertierung vorbereitet. Es ist fast das gleiche wie in der offiziellen Grundverwendung.
test.md
#Beispieldokumentation
##Kapitel XX
###Abschnitt XXX
convert.py
import mistune
with open('test.md', 'r') as test_file:
markdown = mistune.Markdown()
print markdown(test_file.read())
Und lass es laufen.
python convert.py
Dann ist das Ausgabeergebnis wie folgt.
output
<h1>Beispieldokumentation</h1>
<h2>Kapitel XX</h2>
<h3>Abschnitt XXX</h3>
Da es teilweise angewendet wird, scheint es gut, eine Vorlage getrennt von der HTML-Definition usw. vorzubereiten und so zu gestalten, als würde nur der Inhalt des Körpers neu geschrieben.
Nun zum Hauptthema.
Es scheint, dass Mistune die Renderer-Klasse erben und das Element (die Methode) überschreiben sollte, das Sie ausgeben möchten. Dieses Mal möchte ich das Überschriften-Tag durch Section im AsciiDoc-Format ersetzen, daher habe ich es wie folgt erstellt.
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())
Ich werde das machen.
python custom_render.py
Das Ergebnis ist wie folgt.
output
=Beispieldokumentation
==Kapitel XX
===Abschnitt XXX
Ich habe die erwarteten Ergebnisse erzielt!
Danach können Sie das Format konvertieren, indem Sie die Methode aus der erforderlichen Syntax überschreiben und das Ausgabeformat anpassen.
Recommended Posts