print ‘
’def start_heading(self):
print ‘
’
def end_heading(self):
print ‘’
def start_list(self):
print ‘
- ’
def end_list(self):
print ‘’
def start_listitem(self):
print ‘
- ’
-
def end_listitem(self):
print ‘’
def start_title(self):
print ‘
’
def end_title(self):
print ‘’
def sub_emphasis(self, match):
return ‘%s’ % match.group(1)
def sub_url(self, match):
return ‘%s’ % (match.group(1), match.group(1))
def sub_mail(self, match):
return ‘%s’ % (match.group(1), match.group(1))
def feed(self, data):
print data
3. 规则
有了处理程序和文本块生成器,接下来就需要一定的规则来判断每个文本块交给处理程序将要加什么标记,rules.py 代码如下:
#!/usr/bin/python
encoding: utf-8
class Rule:
“”"
规则父类
“”"
def action(self, block, handler):
“”"
加标记
“”"
handler.start(self.type)
handler.feed(block)
handler.end(self.type)
return True
class HeadingRule(Rule):
“”"
一号标题规则
“”"
type = ‘heading’
def condition(self, block):
“”"
判断文本块是否符合规则
“”"
return not ‘\n’ in block and len(block) <= 70 and not block[-1] == ‘:’
class TitleRule(HeadingRule):
“”"
二号标题规则
“”"
type = ‘title’
first = True
def condition(self, block):
if not self.first: return False
self.first = False
return HeadingRule.condition(self, block);
class ListItemRule(Rule):
“”"
列表项规则
“”"
type = ‘listitem’
def condition(self, block):
return block[0] == ‘-’
def action(self, block, handler):
handler.start(self.type)
handler.feed(block[1:].strip())
handler.end(self.type)
return True
class ListRule(ListItemRule):
“”"
列表规则
“”"
type = ‘list’
inside = False
def condition(self, block):
return True
def action(self, block, handler):
if not self.inside and ListItemRule.condition(self, block):
handler.start(self.type)
self.inside = True
elif self.inside and not ListItemRule.condition(self, block):
handler.end(self.type)
self.inside = False
return False
class ParagraphRule(Rule):
“”"
段落规则
“”"
type = ‘paragraph’
def condition(self, block):
return True
4. 解析
最后我们就可以进行解析了,markup.py 代码如下:
#!/usr/bin/python
encoding: utf-8
import sys, re
from handlers import *
from util import *
from rules import *
class Parser:
“”"
解析器父类
“”"
def init(self, handler):
self.handler = handler
self.rules = []
self.filters = []
def addRule(self, rule):
“”"
添加规则
“”"
self.rules.append(rule)
def addFilter(self, pattern, name):
“”"
添加过滤器
“”"
def filter(block, handler):
return re.sub(pattern, handler.sub(name), block)
self.filters.append(filter)
def parse(self, file):
“”"
解析
“”"
self.handler.start(‘document’)
for block in blocks(file):
for filter in self.filters:
block = filter(block, self.handler)
for rule in self.rules:
if rule.condition(block):
last = rule.action(block, self.handler)
if last: break
self.handler.end(‘document’)
class BasicTextParser(Parser):
“”"
纯文本解析器
“”"
def init(self, handler):
Parser.init(self, handler)
self.addRule(ListRule())
self.addRule(ListItemRule())
self.addRule(TitleRule())
self.addRule(HeadingRule())
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!