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