文本块生成器
首先我们需要有一个文本块生成器把纯文本分成一个一个的文本块,以便接下来对每一个文本块进行解析,util.py代码如下:
#!/usr/bin/python
# encoding: utf-8
# 实现文本块生成器把纯文本分成一个一个的文本块,以便接下来对每一个文本块进行解析
def lines(file):
“””
生成器,在文本最后加一空行
“””
for line in file: yield line
yield ‘\n’
def blocks(file):
“””
生成器,生成单独的文本块
“””
block = []
for line in lines(file):
if line.strip():
block.append(line)
elif block:
yield ”.join(block).strip()
block = []
strip()函数可以去除一个字符串前后的空格以及换行符,如果在strip()函数添加不同的参数,如strip(“me”),则可以去除字符串前后的”me”字符。
>>> s = ” This is me\n”
>>> s = s.strip()
>>> s
‘This is me’
>>> s = s.strip(“me”)
>>> s
‘This is ‘
yield()会返回一个生成器(generator)。如果对generator以及对yield语句不太熟悉,建议先阅读yield解释
处理程序
假设我们已经知道一个文本块是title/paragraph/heading/list,我们通过 handlers.py给他们打上合适的HTML标记,代码如下:
#!/usr/bin/python
# encoding: utf-8
# 为文本块打上合适的HTML标记
class Handler:
“””
处理程序父类
“””
def callback(self, prefix, name, *args):
method = getattr(self, prefix + name, None)
if callable(method): return method(*args)
def start(self, name):
self.callback(‘start_’, name)
def end(self, name):
self.callback(‘end_’, name)
def sub(self, name):
def substitution(match):
result = self.callback(‘sub_’, name, match)
if result is None: result = match.group(0)
return result
return substitution
class HTMLRenderer(Handler):
“””
HTML 处理程序,给文本块加相应的 HTML 标记
“””
def start_document(self):
print(‘
def end_document(self):
print(‘