【发布时间】:2023-03-21 23:58:01
【问题描述】:
我们想用自定义 HTML 标记替换默认的 h 标记,该标记由 markdown 使用 # 引入。对于将 Markdown 解析为 HTML,我们使用 the Python Library Markdown。
我们已尝试注册一个使用 H1 正则表达式的扩展。此扩展使用正则表达式 (#) (.*) 来检测 H1 元素。
import markdown
from markdown.extensions import Extension
from markdown.inlinepatterns import SimpleTagPattern
class CustomHeadings(Extension):
def extendMarkdown(self, md, md_globals):
H1_RE = r'(#) (.*)'
h1_tag = SimpleTagPattern(H1_RE, 'span class="h1"')
md.inlinePatterns['h1'] = h1_tag
md_extensions = [CustomHeadings()]
# [...]
def ds_custom_markdown_parse(value):
return markdown.markdown(value, extensions=md_extensions)
我们希望将h{1-6} 元素作为span class="h{1-6}"。但是 Markdown 解析器仍然将字符串 # This is a h1 匹配到 <h1>This is a h1</h1>。我们期望输出为<span class="h1">This is a h1</span>
【问题讨论】:
-
这是一个完全的旁白,你可能无法控制这一点,但使用真正的
<h1>等标签客观上比使用<span class="h1">等标签要好得多。语义很重要。原因有很多,但可访问性可能是最大的原因。 -
@Chris 我们认为这是因为它更容易实现等等,但我们选择以另一种方式来实现,例如一个页面只有一个 H1 或者用户内容不会干扰我们自己的努力。
标签: python markdown python-markdown