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.
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, et
hard_wrap pour inclure la balise
` au moment du saut de ligne sans lignes vides. (Faux par défaut).
À 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.
Recommended Posts