用Markdown写博客

前言

这个博客是用基于Python的Kukkaisvoima搭建的,前几天才发现Kukkaisvoima已经更新到14了。从官网下载源码后,我大致看了一下,主要是一些小修改:添加了年和月的目录、修改了时间格式,终于添加了渴望已久的RSS图标;)。

既然更新了博客程序就不得不说写博客了,由于Kukkaisvoima只支持纯HTML的txt文本方式(连文件后缀都要.txt),所以写起来很费劲。话说HTML尽管很直观但也不是容易写的。之前遇到的最大困难是不支持自动换行,我的做法是直接改Kukkaisvoima源码,在每一行最后加<p>分段,凑合着还能用。最近发现很多人都用Markdown写博客,Markdown语法简洁,可以很方便转成HTML,最主要的是有Python支持,看起来很符合我的胃口,所以马上动手把Markdown集成进Kukkaisvoima。

准备

  • Markdown的语法说明
  • Python Markdown库最新版本为2.1.1

    Linux下安装:

    wget http://pypi.python.org/packages/source/M/Markdown/Markdown-2.x.x.tar.gz
    tar xvzf Markdown-2.x.x.tar.gz
    cd Markdown-2.x.x/
    sudo python setup.py install
    

    命令行用法:

    markdown_py --help
    
  • Vim的Markdown语法插件,Markdown文件扩展名为.md/.mkd/.mkdn/.mark*

    由于Kukkaisvoima只支持后缀.txt文件,所以使用语法文件时可以手动修改文件类型时Vim支持Markdown语法,注意txt文件编码是UTF-8,在Vim命令模式输入:

    :set filetype=markdown
    

    在Vim配置文件中加入下面几行可以实时转换并用浏览器查看效果,按md进行转换:

    " markdown to HTML on Linux 
    nmap <leader>md :w<cr>:silent !markdown_py "%">"%.html"<cr>:silent !firefox "%.html"<cr>
    
    " Markdown to HTML on Windows
    nmap <leader>md :w<cr>:silent !markdown.py "%">"%.html"<cr>:silent !"%.html"<cr>
    

修改

在Kukkaisvoima的主文件index.cgi开头添加Markdown的Python库导入:

import markdown

在index.cgi的Entry类析构函数中读取博客文本时进行Markdown解析:

class Entry:
    firstpre = re.compile("<p.*?(</p>|<p>)", re.DOTALL | re.IGNORECASE)
    whitespacere = re.compile("s")
    def __init__(self, fileName, datadir):
        self.fileName = fileName
        self.fullPath = os.path.join(datadir, fileName)

        # Markdown support 
        tempf = open(self.fullPath, 'r')
        self.headline = tempf.readline()
        temptext = tempf.read()
        temptext = temptext.decode(encoding)
        temptext = markdown.markdown(temptext)
        temptext = temptext.encode(encoding)
        self.text = temptext.splitlines(True)

        #self.text = [line for line in self.text if not line.startswith('#')]
        #self.headline = self.text[0]
        #self.text = self.text[1:]
        self.author = defaultauthor
        self.cat = ''
        name, date, categories = fileName[:-4].split('_')
        self.cat = categories.split(',')
        self.date = generateDate(self.fullPath)
        self.comments = getComments(self.fileName)
        self.url = "%s/%s" % (baseurl,
                              quote_plus(self.fileName[:-4]))

由于Markdown的Python库只支持Unicode的输入输出,所以需要在UTF-8和Unicode之间进行转换。

效果

大功告成之后测试一下,用Markdown修改之前写的博文:

Markdown:

**引言:**
>A Wise old computer scienist once said: Make your data structure
>smart and your code dump.
>
>We need SMART Models, THIN Controllers, and DUMB Views.

HTML:

引言:

A Wise old computer scienist once said: Make your data structure
smart and your code dump.

We need SMART Models, THIN Controllers, and DUMB Views.

总体来说效果不错,基本上能满足我写博客的需求了,至于其他的如添加Tag的属性之类的只能用HTML来写了:)。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注