我们想用一个定制的HTML标记替换默认的h
标记,它是由markdown使用#
引入的。为了将Markdown解析为HTML,我们使用the Python Library Markdown。在
我们试图注册一个使用H1正则表达式的扩展。这个扩展使用regexp(#) (.*)
来检测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>
标题是块级元素,因此在运行
inlinePatterns
之前,inlinePatterns.
不解析标题,Python Markdown运行BlockParser,它将文档的所有块级元素转换为ElementTree对象。然后,每个块级元素一次一个地通过inlinePatterns
,并解析span级元素。在例如,给定标题
# This is a h1
,块解析器已经将其转换为H标记<h1>This is a h1</h1>
,而inlinePatterns只看到该标记This is a h1
的文本内容。在您有几种解决方法:
BlockProcessor
,这样它们就可以从一开始就创建您想要的元素。在选项2应该简单得多,事实上,它是一些现有扩展使用的方法。在
完全披露者:我是Python降价项目的主要开发人员。在
相关问题 更多 >
编程相关推荐