我只是继续前进,并使用python-markdown和猴子补丁。您可以在写自己的def_block_parser()
功能和替代默认的禁用某些功能降价:
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
请注意,我简单地复制,并从blockprocessors.py
文件粘贴默认build_block_processor()
功能,调整了它一点点(在该模块的所有名称前面插入bp.
),并将其添加到代码块处理器的行中。然后将生成的函数修补回模块中。对于inlinepatterns.py
,treeprocessor.py
,preprocessor.py
和postprocessor.py
而言,类似的方法看起来是可行的,其中的每一种进行不同类型的处理。
而不是重写设置单个解析器的函数,正如我在上面所做的那样,您也可以用无所事事的子类自己修补解析器类本身,这些子类仍然会被调用但什么都不会做。这可能是简单的:
from markdown import blockprocessors as bp
class NoProcessing(bp.BlockProcessor):
def test(self, parent, block):
return False # never invoke this processor
bp.CodeBlockProcessor = NoProcessing
可能有其他的降价库,更明确地允许被禁用的功能,但python-markdown
看起来是相当容易被破解。
当谈到解析器生成器时,有很多选择。你可以看看这个页面,例如:http://wiki.python.org/moin/LanguageParsing – 2012-02-28 21:46:25
我使用降价模块(你可以得到它与easy_install的),发现它很容易添加更多的功能通过编写一个自定义的扩展。 – Frg 2012-02-28 21:54:51