In Python von Markdown in HTML konvertieren

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.

Einfache Bedienung

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).

Verwenden Sie Ihren eigenen Reexer und Render

Ü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.

Referenz

Recommended Posts

In Python von Markdown in HTML konvertieren
Konvertieren Sie Markdown in Python in PDF
Python
Konvertieren Sie Markdown in Python in PDF
In Python von Markdown in HTML konvertieren
So konvertieren Sie das Format einfach aus Markdown
Konvertieren Sie die psd-Datei in Python in png
Konvertieren Sie von Katakana zu Vokal Kana [Python]
Konvertieren Sie die absolute URL in eine relative URL in Python
Änderungen von Python 3.0 zu Python 3.5
Konvertieren Sie die FBX-Datei in Python in ASCII <-> BINARY
[Python] Konvertieren von DICOM in PNG oder CSV
Konvertieren Sie den exponentiellen Float in Python in str
Konvertieren Sie kubischen Netzcode in Python in WKT
In Vim: Make, um HTML von Markdown mit Pandoc auszugeben
Ich habe eine Webanwendung in Python erstellt, die Markdown in HTML konvertiert
So konvertieren / wiederherstellen Sie einen String mit [] in Python
[Python] Datum in Zeichenfolge konvertieren
Post von Python nach Slack
So löschen Sie stdout in Python
Konvertieren Sie numpy int64 in python int
[Python] Liste in Pandas konvertieren [Pandas]
Flirte von PHP nach Python
Konvertieren Sie das NumPy-Array "ndarray" in Python [tolist ()]
Konvertieren Sie HTML in eine Textdatei
Konvertieren Sie die Netzmaske der CIDR-Notation in Python in eine gepunktete Dezimalschreibweise
Melden Sie sich auf der Website in Python an
App-Entwicklung zum Twittern in Python aus Visual Studio 2017
OCR aus PDF in Python
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
Konvertieren Sie das Scratch-Projekt in Python
[Python] Konvertieren Sie Shift_JIS in UTF-8
Konvertieren Sie die asynchrone API im Callback-Stil in async / await in Python
So laden Sie Dateien von Selenium of Python in Chrome herunter
Konvertieren Sie die CIDR-Notation in Python
Wechseln Sie von Python2.7 zu Python3.6 (centos7)
Sprechen mit Python [Text zu Sprache]
Konvertieren / Zurückgeben von Klassenobjekten in das JSON-Format in Python
Stellen Sie von Python aus eine Verbindung zu SQLite her
Wie man in Python entwickelt
Konvertieren Sie den Webpay-Entitätstyp in den Dict-Typ (rekursiv in Python).
Schreiben Sie relative Links in HTML in absolute Links mit Python (lxml) um
Konvertieren Sie Python 3.x-Code in Python 2.x.
Post an Slack in Python
So schneiden Sie ein Block-Multiple-Array aus einem Multiple-Array in Python
Linux-Skript zum Konvertieren von Markdown-Dateien vom JupyterLab-Format in das Qiita-Format
Erlauben Sie Python, die Zeichenfolge der Eingabedatei aus dem Ordner auszuwählen
Drücken Sie in Python auf REST, um Daten von New Relic abzurufen
Konvertieren Sie das an Jason Stay Samlike in Python übergebene Bild in ASCII Art
Konvertieren Sie eine Excel-Datei für verschiedene Zwecke in Python in Text
Rufen Sie Matlab von Python zur Optimierung auf
Konvertieren Sie .ipynb in .html (mit BatchFile)
Python: Tags von HTML-Daten ausschließen
[Python] Wie man PCA mit Python macht
Zeigen Sie Fotos in Python und HTML an
Post von Python auf Facebook Timeline
Verwendung von SQLite in Python
[Lambda] [Python] Von Lambda auf Twitter posten!
Konvertieren Sie ein ggplot-basiertes Diagramm in HTML
Workflow zum Konvertieren der Formel (Bild) in Python
Im Python-Befehl zeigt Python auf Python3.8
Konvertieren Sie die Liste mit Python in DataFrame