文章目录
  1. 1. 1、启用fenced_code扩展
  2. 2. 2、使用pygments高亮代码
  3. 3. 3、唠叨几句

以前写任何web应用的时候都找 WYSIWYG 的编辑器,后来发现了markdown这么一个东西。在很长的时间里都没有真正的去使用过它。昨天查找资料的时候在某人的博客看到markdown,突然又对这个燃起了些兴趣。

markdown的格式易于阅读,自从习惯了VIM后,对这种不需要强大的编辑器支持的标记语言也觉得很爽。所以就决定把blog换成使用markdown来编写文章。

默认的markdown的code block是不支持标记为何种语言的,这样如果全部交给pygments来识别,有些地方可能识别率真不够高。所以还是喜欢自己来指定这段代码使用的是何种语言。

1、启用fenced_code扩展

1
markdown(code,extensions=['fenced_code']

这样就可以使用fenced_code来扩展markdown的语法了。使用方法如下:

1
2
3
4
~~~~.python
def hello():
print "hello"
~~~~

2、使用pygments高亮代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def markdowntohtml(value):
"""将markdown转换成html并高亮代码"""
value = value.replace(u'全角空格',u' ')
value = markdown(value,extensions=['fenced_code'])#用markdown进行解析
#用lxml来用语法高亮
soup = fromstring(value)#生成dom对象
for s in soup.xpath('//pre/code'):
if s.get('class'):#判断是否指定class属性,用来确实用哪种lexer分析语法
lexer = get_lexer_by_name(s.get('class'))
result = highlight(s.text,lexer,HtmlFormatter())#生成高亮处理后的html
#替换掉原来的节点
s = s.getparent()
result = fromstring(result).xpath('//div')[0]
soup.replace(s, result)
return etree.tounicode(soup)[:-7][6:].replace(u' ',u'全角空格')

上面是我自己实现的解析markdown并实现代码加亮的代码,并保留中文的全角空格,我喜欢用中文的全角空格来实现段前空两格。

3、唠叨几句

其实markdown还有一个extension来配合pygments加亮代码,但那个似乎不能自己指定代码是什么语言,所以就配合lxml自己实现了一个。

文章目录
  1. 1. 1、启用fenced_code扩展
  2. 2. 2、使用pygments高亮代码
  3. 3. 3、唠叨几句