【发布时间】:2021-11-20 03:30:18
【问题描述】:
我想在 Python-Markdown 中添加一个额外的语法:如果 n 是一个正整数,>>n 应该扩展为 <a href="#post-n">n</a>。 (双尖括号 (>>) 是在imageboard forums 中创建链接的常规语法。)
默认情况下,Python-Markdown 将 >>n 扩展为嵌套块引用:<blockquote><blockquote>n</blockquote></blockquote>。有没有办法从>>n 创建链接,同时保留blockquote 的默认行为的其余部分?换句话说,如果x 是一个正整数,>>x 应该展开成一个链接,但如果x 不是一个正整数,>>x 仍然应该展开成嵌套的块引用。
我已阅读相关的 wiki 文章:Tutorial 1 Writing Extensions for Python Markdown。根据我在 wiki 中学到的知识,我编写了一个自定义扩展:
import markdown
import xml.etree.ElementTree as ET
from markdown.extensions import Extension
from markdown.inlinepatterns import Pattern
class ImageboardLinkPattern(Pattern):
def handleMatch(self, match):
number = match.group('number')
# Create link.
element = ET.Element('a', attrib={'href': f'#post-{number}'})
element.text = f'>>{number}'
return element
class ImageboardLinkExtension(Extension):
def extendMarkdown(self, md):
IMAGEBOARD_LINK_RE = '>>(?P<number>[1-9][0-9]*)'
imageboard_link = ImageboardLinkPattern(IMAGEBOARD_LINK_RE)
md.inlinePatterns['imageboard_link'] = imageboard_link
html = markdown.markdown('>>123',
extensions=[ImageboardLinkExtension()])
print(html)
但是,>>123 仍会产生 <blockquote><blockquote>123</blockquote></blockquote>。上面的实现有什么问题?
【问题讨论】:
标签: python markdown python-markdown