我正在撰写评论系统。它必须有像stackoverflow那样的格式化系统。
用户可以使用一些内联降价语法,例如粗体或斜体。我认为我可以使用正则表达式替换来解决这个问题。
但我还有另外一件事:通过提供4个空格缩进,用户可以创建代码块。我认为我不能通过使用正则表达式来做到这一点。或解析idents对我来说太高级用法:)此外,通过使用正则表达式替换创建列表对我来说似乎是不可能的。
感谢您抽出时间和回复。
答案 0 :(得分:8)
我会继续使用python-markdown并对其进行修补。您可以编写自己的def_block_parser()
函数,并将其替换为默认值,以禁用某些Markdown功能:
from markdown import blockprocessors as bp
def build_block_parser(md_instance, **kwargs):
""" Build the default block parser used by Markdown. """
parser = bp.BlockParser(md_instance)
parser.blockprocessors['empty'] = bp.EmptyBlockProcessor(parser)
parser.blockprocessors['indent'] = bp.ListIndentProcessor(parser)
# parser.blockprocessors['code'] = bp.CodeBlockProcessor(parser)
parser.blockprocessors['hashheader'] = bp.HashHeaderProcessor(parser)
parser.blockprocessors['setextheader'] = bp.SetextHeaderProcessor(parser)
parser.blockprocessors['hr'] = bp.HRProcessor(parser)
parser.blockprocessors['olist'] = bp.OListProcessor(parser)
parser.blockprocessors['ulist'] = bp.UListProcessor(parser)
parser.blockprocessors['quote'] = bp.BlockQuoteProcessor(parser)
parser.blockprocessors['paragraph'] = bp.ParagraphProcessor(parser)
return parser
bp.build_block_parser = build_block_parser
请注意,我只是复制并粘贴了build_block_processor()
文件中的默认blockprocessors.py
函数,稍稍调整一下(在该模块的所有名称前插入bp.
) ,并注释掉它添加代码块处理器的行。然后将得到的函数猴子修补回模块。类似的方法看起来适用于inlinepatterns.py
,treeprocessor.py
,preprocessor.py
和postprocessor.py
,每种方法都会执行不同类型的处理。
如上所述,不是重写设置各个解析器的函数,而是还可以使用do-nothing子类修补解析器类本身,这些子类仍然会被调用,但什么都不做。这可能更简单:
from markdown import blockprocessors as bp
class NoProcessing(bp.BlockProcessor):
def test(self, parent, block):
return False # never invoke this processor
bp.CodeBlockProcessor = NoProcessing
可能还有其他Markdown库更明确地允许禁用功能,但python-markdown
看起来似乎是合理的黑客攻击。