README
项目详情
python基础编程 第20章 项目1:自动添加标签
运行
python markup.py < test_input.txt > test_output.html
部分逻辑说明
过滤器 filters 替换特定元素为HTML元素
规则器 rules 根据判定条件,打印特定HTML头尾及Data元素
类型判定规则
1.标题,只包含一行的文本块,长度最多为70个字符,以冒号结束的文本块不属于标题
2.题目,文档中的第一个文本块,前提条件是它属于标题
3.列表项, 以连字符(-)打头的文本块
4.列表,以紧跟在非列表项文本块后面的列表项开头,以后面紧跟着非列表项文本块的列表项结束
注意
规则的先后顺序很重要,比如列表项(li)/列表(ul)
Resource
#!/usr/bin/python
# -*- coding: 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 = []
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Handler:
"""
Handler类是所有处理程序的基类。
"""
# 方法callback根据指定的 前缀 和 名称 查找相应的方法。
def callback(self, prefix, name, *args):
method = getattr(self, prefix + name, None)
if callable(method): return method(*args)
# 辅助方法start,调用callback
def start(self, name):
self.callback('start_', name)