Convertir de Markdown en HTML en Python

Lors du développement d'applications Web avec Django ou Bottle, vous pouvez rendre Markdown en Python pour le texte que vous tapez. Donc, cette fois, je vais essayer de le convertir en HTML côté Python en utilisant le package OSS appelé mistune.

Utilisation simple

Si vous suivez l'exemple écrit dans le fichier README de mistune, ce sera comme suit. En fait, dans le cas d'un texte normal, chaque paragraphe est entouré d'une balise <p>, dans laquelle les surbrillances et les diagonales sont développées. Dans le cas de la notation de liste, on a l'impression qu'elle est entourée des balises correspondantes.

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 = """Paragraphe 1
   ...: 
   ...:Paragraphe 2"""

In [4]: mistune.markdown(txt)
Out[4]: '<p>Paragraphe 1</p>\n<p>Paragraphe 2</p>\n'

In [5]: txt = """-Liste 1
   ...: -Liste 2
   ...: -Liste 3"""

In [6]: mistune.markdown(txt)
Out[6]: '<ul>\n<li>Liste 1</li>\n<li>Liste 2</li>\n<li>Liste 3</li>\n</ul>\n'

Il existe également des options telles que ʻescape(True par défaut) pour échapper ou non la balise HTML saisie, ethard_wrap pour inclure la balise
` au moment du saut de ligne sans lignes vides. (Faux par défaut).

Utilisez votre propre Reexer et Render

À propos, en cas d'erreur, la conversion selon les spécifications générales de démarquage est fournie par défaut, mais en plus, il existe également une fonction pour spécifier des règles pour les notations et symboles uniques et la conversion en HTML.

Bien que mistune fournisse une fonction de liaison pour http / https en standard, il ne prend pas en charge d'autres protocoles tels que ftp et smb. Ici, à titre d'exemple, ajoutons une fonction pour ajouter automatiquement une balise à un lien.

La méthode consiste à écrire vos propres règles dans Exerciser et à spécifier la méthode de conversion correspondant à Renderer. Ici, l'URL du protocole ftp ou smb est extraite avec une expression régulière avec Lexer, et les balises <a> sont ajoutées avant et après avec le Renderer.

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)

Pour l'utiliser, spécifiez un moteur de rendu et un InlineLexer personnalisés dans mistune.Markdown ().

renderer = DocumentLinkRenderer()
inline = DocumentLinkInlineLexer(renderer)
inline.enable_document_link()
markdown = mistune.Markdown(renderer, inline=inline)
    
markdown("markdown text")

Lorsque vous l'utilisez réellement, vous pouvez voir que le lien est automatiquement créé pour l'URL ftp comme indiqué ci-dessous.

In [20]: markdown("ftp://path/to/file")
Out[20]: '<p><a href="ftp://path/to/file">ftp://path/to/file</a></p>\n'

Avec cette fonction, vous pouvez attacher un lien vers un mot spécifique comme le mot-clé Hatena, ou lier l'ID de l'article et l'URL comme un ticket pour Redmine ou Backlog.

référence

Recommended Posts

Convertir de Markdown en HTML en Python
Convertir Markdown en PDF en Python
Python
Convertir Markdown en PDF en Python
Convertir de Markdown en HTML en Python
Comment convertir facilement le format de Markdown
Convertir un fichier psd en png en Python
Conversion de katakana en voyelle kana [python]
Convertir une URL absolue en URL relative en Python
Changements de Python 3.0 à Python 3.5
Convertir le fichier FBX en ASCII <-> BINARY en Python
[Python] Conversion de DICOM en PNG ou CSV
Convertir un float exponentiel en str en Python
Convertir le code de maillage cubique en WKT en Python
Dans Vim: créer une sortie HTML à partir de markdown en utilisant pandoc
J'ai créé une application Web en Python qui convertit Markdown en HTML
Comment convertir / restaurer une chaîne avec [] en python
[python] Convertir la date en chaîne
Publier de Python vers Slack
Pour vider stdout en Python
Convertir numpy int64 en python int
[Python] Convertir la liste en Pandas [Pandas]
Flirter de PHP à Python
Convertir le tableau NumPy "ndarray" en lilt en Python [tolist ()]
Convertir le HTML en fichier texte
Convertir le masque de réseau de notation CIDR en notation décimale à points en Python
Connectez-vous au site Web en Python
Développement d'applications pour tweeter en Python à partir de Visual Studio 2017
OCR à partir de PDF en Python
Anaconda mis à jour de 4.2.0 à 4.3.0 (python3.5 mis à jour vers python3.6)
Convertir le projet Scratch en Python
[Python] Convertir Shift_JIS en UTF-8
Convertir l'API asynchrone de style callback en async / await en Python
Comment télécharger des fichiers depuis Selenium of Python dans Chrome
Convertir la notation CIDR en Python
Passer de python2.7 à python3.6 (centos7)
Parler avec Python [synthèse vocale]
Convertir / renvoyer des objets de classe au format JSON en Python
Connectez-vous à sqlite depuis python
Comment développer en Python
Convertir le type d'entité Webpay en type Dict (récursivement en Python)
Réécrire les liens relatifs en html en liens absolus avec python (lxml)
Convertir le code python 3.x en python 2.x
Publier sur Slack en Python
Comment découper un bloc de plusieurs tableaux à partir d'un multiple en Python
Script Linux pour convertir les fichiers Markdown du format JupyterLab au format Qiita
Autoriser Python à sélectionner la chaîne de caractères du fichier d'entrée dans le dossier
Appuyez sur REST en Python pour obtenir des données de New Relic
Convertir l'image passée à Jason Stay Samlike en Python en ASCII Art
Convertir un fichier Excel en texte en Python à des fins de comparaison
Appelez Matlab depuis Python pour optimiser
Convertir .ipynb en .html (avec BatchFile)
Python: exclure les balises des données html
[Python] Comment faire PCA avec Python
Afficher les photos en Python et html
Publication de Python sur la chronologie Facebook
Comment utiliser SQLite en Python
[Lambda] [Python] Publier sur Twitter depuis Lambda!
convertir un graphique basé sur ggplot en html
Workflow pour convertir une formule (image) en python
Dans la commande python, python pointe vers python3.8
Convertir la liste en DataFrame avec python