Я бы просто пошел дальше и использовал 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
Обратите внимание, что я просто скопировал и вставил функцию build_block_processor()
по умолчанию изфайл blockprocessors.py
, немного его подправил (вставив 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
Могут быть и другие библиотеки Markdown, которые более явно разрешают отключение функциональности, но python-markdown
выглядит так, что его можно взломать.