GeorgeYang'Blog

my technology blog

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

阅读:237 创建时间:15-12-27 00:36:49 tags:python,markdown

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+空格的代码转化

参考网站