python-markdown无法将```生成标签问题解决方法

和季
2023-12-01

python-markdown无法将“`生成标签问题解决方法

我用的python-Markdown==2.6.5 markdown生成html是,发现无法将“`转成代码段,但是看别人的python博客源码,却有代码段生成,详细看一下代码,发现都是一样的转化代码:

html=markdown.markdown(mdcontent)

找了下markdown文件,发现代码段除里“`定义还可以用tab符+空格定义,所以,为了能让 ”’ 也变成代码段的标签,我们需要对md进行预处理:

configs = {}
myext = mdextension.CodeExtension(configs=configs)
md = markdown.markdown(fileContent, extensions=[myext])

其中mdextension是一个py文件,里面包含md文件的处理扩展,包括预处理和后置处理,代码如下:

#-*-coding:utf-8-*-
__author__ = 'george.yang'
from markdown.extensions import Extension
from markdown.util import etree
from markdown.postprocessors import Postprocessor
from markdown.preprocessors import Preprocessor

##预处理器
class CodePreprocessor(Preprocessor):
    def run(self, lines):
        # return lines
        new_lines = []
        flag_in = False
        for line in lines:
            if line[:3]=='```':
                line = line.lstrip('```')
                if flag_in:
                    flag_in = False
                else:
                    flag_in = True

            if flag_in:
                line = '     ' + line

            new_lines.append(line)
        return new_lines

##后置处理器
class CodePostprocessor(Postprocessor):
    def run(self, text):
        return text
        # t_list = []
        # codeIn = False
        # for line in text.split('\n'):
        #     t_list.append(line)
        # return '\n'.join(t_list)

##扩展主体类

class CodeExtension(Extension):
    def __init__(self, configs={}):
        self.config = configs

    def extendMarkdown(self, md, md_globals):
        ##注册扩展,用于markdown.reset时扩展同时reset
        md.registerExtension(self)

        ##设置Preprocessor
        codepreprocessor = CodePreprocessor()
        #print md.preprocessors.keys()
        md.preprocessors.add('codepreprocessor', codepreprocessor, '<normalize_whitespace')

        ##设置Postprocessor
        codepostprocessor = CodePostprocessor()
        #print md.postprocessors.keys()
        md.postprocessors.add('codepostprocessor', codepostprocessor, '>unescape')

        ##print md_globals   ##markdown全局变量

进过markdown扩展处理后,可以将“`生成代码段,同时兼容tab+空格的代码转化

参考网站

 类似资料: