我只是繼續前進,並使用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