Ich möchte ein Markdown-Dokument manipulieren.
Wenn ich solche Dinge in Python nachgeschlagen habe, scheint es üblich zu sein, Markdown in HTML zu konvertieren. Wenn Sie stattdessen mit Dokumenten im Markdown-Format arbeiten möchten, müssen Sie in der Lage sein, so etwas wie AST zu verwenden. Da an sich nicht viel war, suchte ich nach etwas, das als Basis für den Umbau dienen könnte.
Das Verwalten eines Markdown-Dokuments ist schwierig.
Angenommen, Sie möchten eine Oleore-Erweiterung (Nanbuwks-Erweiterung) erstellen, die eine bestimmte Vorlage einfügt, wenn Sie den folgenden Kommentar in den Satz schreiben.
[](nanbuwks:template)
Ist es möglich, einfach eine Zeichenfolge nach Makrdown-Text zu suchen / zu ersetzen?
――Nein, wenn diese Zeile im Codeblock enthalten ist, müssen Sie sie ignorieren.
\
", aber wenn Sie" \ \
\ " sehen, müssen Sie ihn ignorieren. ――Aber wenn "\
\ \
"in \ [] \ () steht, müssen Sie es ignorieren.Schließlich müssen Sie die Markdown-Dokumentstruktur analysieren, um festzustellen, ob sie als Rohtext betrachtet werden kann, und dann die Zeichenfolge suchen / ersetzen.
Dies ist nicht nur auf die Oleore-Erweiterung beschränkt, sondern auch auf das Ändern des Bildpfads, das Ändern der Überschriftenebene, die automatische Formatierung usw.
・ ・ ・ Wie analysiere ich die Dokumentstruktur von Markdown?
Im Allgemeinen scheint es Markdown in HTML auszugeben.
Markdown → Talkerizer → Dokumentstrukturdaten → Renderer → Ausgabe in HTML
Wird sein. Stellen Sie sich Folgendes vor.
So was?
--markdown hat Block- und Span-Level
Speichern Sie die vom Sprecher untersuchte Dokumentstruktur in internen Daten Dokumentstrukturdaten haben eine Baumstruktur
Rekonstruieren Sie das Dokument, indem Sie Tags und Steuertext basierend auf den Dokumentstrukturdaten hinzufügen. Im Allgemeinen gibt es hier viele Dinge, um HTML zu erstellen.
Wenn Sie die Dokumentstrukturdaten erhalten können, indem Sie sie mit der ursprünglichen Markdown-Textstruktur verknüpfen, können Sie unter Bezugnahme auf die Dokumentstruktur arbeiten. Aber ich konnte es nicht finden. Dann wollte ich so etwas machen, indem ich versuchte, das vorhandene zu modifizieren, aber es scheint viel Zeit zu dauern, also gab ich dieses Mal auf.
Markdown kann aus Dokumentstrukturdaten und -kontext neu generiert werden. Da es sich jedoch um abstrakte Daten handelt, kann das Originaldokument nicht vollständig reproduziert werden. Gibt es so etwas nicht, weil es in Ordnung ist? → Es schien nicht da zu sein.
Können Sie so etwas wie AST bekommen? Es scheint keine Ausgabe zu geben, ohne den Code zu ändern.
(Hinzugefügt am 4. Januar 2020. Ich habe einige Dinge gefunden, die später von Markdown in JSON konvertiert werden können. Ich habe die Details nicht untersucht, aber sie haben möglicherweise die Anforderungen erfüllt.)
Es scheint, dass Markdown durch Ändern des vorhandenen Codes ausgegeben werden kann. Ist es einfach, weitere Funktionen hinzuzufügen, wenn dies möglich ist?
Untersuchen Sie mit den folgenden Anforderungen
Python-Markdown
https://github.com/Python-Markdown/markdown Es fühlt sich an wie eine Standardbibliothek. Es gibt viele Plug-Ins. Es scheint jedoch nicht in etwas anderes als HTML konvertiert zu sein. Zum Beispiel scheint Markdown-LaTeX auch die Inline-Markdown-LaTeXTEX-Notation in Markdown in HTML zu konvertieren. Ich habe aufgegeben, weil es scheint, dass es anders ist als das, was ich will.
commonmark.py
https://github.com/readthedocs/commonmark.py
Commonmark-Port zu Python. Die gemeinsame Marke wird mit der Standardidee von Markdown erstellt. Die Referenzimplementierung ist unten. https://github.com/commonmark/commonmark.js
Ich konzentriere mich auf den Referenzteil und gebe auf, weil er anscheinend nicht für die Anwendung geeignet ist.
mistune
Die Verarbeitung scheint schnell zu sein Version2 ist am 12.12.2019 erschienen, aber ab dem 1.1.2019 ist 0.8.4 auf Ubuntu pip3 installiert. Ich habe Folgendes getan, um die neueste Version zu installieren.
$ sudo pip3 install git+https://github.com/lepture/mistune.git
Geben Sie wegen fehlender Dokumentation auf
mistletoe
Standardmäßig hat Mistel zusätzlich zu HTML eine Ausgabe an LaTeX.
Es scheint einfach zu bedienen zu sein, daher werde ich es darauf aufbauen.
Derjenige, der gut zu sein scheint, der herauskam, nachdem er die obigen vier untersucht und mit Mistel gemacht hatte. Ich habe es nicht richtig überprüft, aber ich werde eine andere Gelegenheit nutzen.
pycmark
https://github.com/tk0miya/pycmark
Es gibt eine Beschreibung, dass "aufgrund der Erweiterbarkeit flexibles Parsen wie die Unterstützung von GFM (GitHub Flavored Markdown) und das Hinzufügen der ursprünglichen Notation möglich ist". 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. ein.
Recommended Posts