Wenn Sie Web-Apps mit Django oder Bottle entwickeln, möchten Sie möglicherweise Markdown in Python für den eingegebenen Text rendern. Dieses Mal werde ich versuchen, es auf der Python-Seite mit dem OSS-Paket mistune in HTML zu konvertieren.
Wenn Sie dem in der README-Datei von mistune geschriebenen Beispiel folgen, sieht es wie folgt aus. Im Fall von normalem Text ist jeder Absatz von einem
-Tag umgeben, in dem Hervorhebungen und Diagonalen erweitert werden. Bei der Listennotation scheint es, als wäre es von den entsprechenden Tags umgeben.
In [1]: import mistune
In [2]: mistune.markdown('I am using **mistune markdown parser**')
Out[2]: '<p>I am using <strong>mistune markdown parser</strong></p>\n'
In [3]: txt = """Absatz 1
...:
...:Absatz 2"""
In [4]: mistune.markdown(txt)
Out[4]: '<p>Absatz 1</p>\n<p>Absatz 2</p>\n'
In [5]: txt = """-Listing 1:
...: -Listing 2:
...: -Listing 3:"""
In [6]: mistune.markdown(txt)
Out[6]: '<ul>\n<li>Listing 1:</li>\n<li>Listing 2:</li>\n<li>Listing 3:</li>\n</ul>\n'
Es gibt auch Optionen wie "Escape" (standardmäßig "True"), um das eingegebene HTML-Tag zu maskieren, und "hard_wrap", um das "
" -Tag zum Zeitpunkt des Zeilenumbruchs ohne Leerzeilen einzuschließen. (Standardmäßig falsch).
Übrigens wird im Fehlerfall standardmäßig die Konvertierung gemäß den allgemeinen Abschriftenspezifikationen bereitgestellt. Darüber hinaus gibt es jedoch auch eine Funktion zum Festlegen von Regeln für eindeutige Notationen und Symbole und zum Konvertieren in HTML.
Obwohl Mistune standardmäßig eine Verknüpfungsfunktion für http / https bietet, werden andere Protokolle wie FTP und SMB nicht unterstützt. Fügen wir hier als Beispiel eine Funktion hinzu, mit der einem Link automatisch ein Tag hinzugefügt wird.
Die Methode besteht darin, Ihre eigenen Regeln in Exerciser zu schreiben und die Konvertierungsmethode anzugeben, die dem Renderer entspricht. Hier wird die URL des FTP- oder SMB-Protokolls mit einem regulären Ausdruck mit Lexer extrahiert, und die Tags < werden vor und nach dem Renderer hinzugefügt.
import re
from mistune import Renderer, InlineLexer
class DocumentLinkRenderer(Renderer):
def document_link(self, link):
return '<a href="{l}">{l}</a>'.format(l=link)
class DocumentLinkInlineLexer(InlineLexer):
def enable_document_link(self):
self.rules.document_link = re.compile(r'''^((https?|smb|ftp|file):\/\/[^\s<]+[^<.,:;"')\]\s])''')
self.default_rules.insert(3, 'document_link')
def output_document_link(self, m):
text = m.group(1)
return self.renderer.document_link(text)
Geben Sie zur Verwendung einen benutzerdefinierten Renderer und InlineLexer in "mistune.Markdown ()" an.
renderer = DocumentLinkRenderer()
inline = DocumentLinkInlineLexer(renderer)
inline.enable_document_link()
markdown = mistune.Markdown(renderer, inline=inline)
markdown("markdown text")
Wenn Sie es tatsächlich verwenden, können Sie sehen, dass der Link automatisch für die FTP-URL erstellt wird, wie unten gezeigt.
In [20]: markdown("ftp://path/to/file")
Out[20]: '<p><a href="ftp://path/to/file">ftp://path/to/file</a></p>\n'
Mit dieser Funktion können Sie einen Link an ein bestimmtes Wort wie das Schlüsselwort Hatena anhängen oder die Artikel-ID und URL wie ein Ticket für Redmine oder Backlog verknüpfen.
Recommended Posts