降低python中markdown的功能

Mir*_*rak 3 python stack-overflow markup markdown parsing

我正在写评论系统.它必须具有像stackoverflow一样的格式化系统.

用户可以使用一些内联降价语法,如粗体斜体.我认为我可以使用正则表达式替换来解决这个问题.

但是我还有另一件事要做:通过提供4个空格缩进,用户可以创建代码块.我认为我不能通过使用正则表达式来做到这一点.或解析idents对我来说太高级用法:)此外,通过使用正则表达式替换创建列表对我来说似乎是不可能的.

  • 这样做的最佳方法是什么?
  • 是否有任何降价库可以减少它的功能?(例如,我将尝试删除表支持)
  • 如果我应该编写自己的解析器,我应该从头开始编写有限状态机吗?还是有其他库让它更容易?

感谢您给予时间和回复.

kin*_*all 8

我只是继续使用python-markdown和monkey-patch它.您可以编写自己的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
Run Code Online (Sandbox Code Playgroud)

请注意,我只是简单地复制并粘贴了文件中的默认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
Run Code Online (Sandbox Code Playgroud)

可能还有其他Markdown库更明确地允许禁用功能,但python-markdown看起来它可以合理地破解.