【发布时间】:2020-03-12 13:45:48
【问题描述】:
我正在尝试编写一个 Python markdown Treeprocessor 扩展,它将一个 span 标签包装在一个 div 标签内;所以如果我有(降价)-
before <span>hello world</span> after
然后我想进行后处理 -
before <div><span>hello world</span></div> after
Python markdown 似乎拥有所有这些您可以使用和扩展的不同处理器 -
https://python-markdown.github.io/extensions/api/
我认为 TreeProcessor 可能是最适合的,并想出了以下 -
from markdown.extensions import Extension
from markdown.treeprocessors import Treeprocessor
import markdown
class MyTreeProcessor(Treeprocessor):
def run(self, doc):
def iterate(parent):
print ("%s %s :: %s" % (parent.tag, parent.attrib, parent.text))
for child in parent.getchildren():
iterate(child)
iterate(doc)
class MyTreeExtension(Extension):
def extendMarkdown(self,
md,
key="my_extension",
index=1e8):
md.registerExtension(self)
md.treeprocessors.register(MyTreeProcessor(md.parser),
key, index)
if __name__=="__main__":
md=markdown.Markdown(extensions=[MyTreeExtension()])
md.convert("before <span>hello world</span> after")
但如果我使用索引值 1e8 运行它,我会得到以下结果 -
div {} :: None
p {} :: before <span>hello world</span> after
如果我使用索引值 0 运行它,我会得到以下结果 -
div {} ::
p {} :: before wzxhzdk:0hello worldwzxhzdk:1 after
这些都不是我想要的——在第一种情况下,span 没有被处理,在第二种情况下,它已经以某种奇怪的格式处理了:-/
找到 Markdown 扩展文档对于看似简单的任务非常繁琐 - 有人可以确认我在这里(或不)使用 Treeprocessor 时正在吠叫正确的树,如果是这样,我做错了什么无法将此span 解析为etree.Element?
TIA
【问题讨论】:
-
好奇你为什么使用
1e8的优先级?如果我没记错的话,等于100000000.0。然而,只有两个优先级为10和20的内置树处理器。您可以轻松使用任何高于20的数字。不用一千亿。