python的即时标记项目练习笔记
这是《python基础教程》后面的实践,照着写写,一方面是来熟悉python的代码方式,另一方面是练习使用python中的基本的以及非基本的语法,做到熟能生巧。
这个项目一开始比较简单,不过重构之后就有些复杂了,但是更灵活了。
按照书上所说,重构之后的程序,分为四个模块:处理程序模块,过滤器模块,规则(其实应该是处理规则),语法分析器。
先来说处理程序模块,这个模块的作用有两个,一个是提供那些固定的html标记的输出(每一个标记都有start和end),另一个是对这个标记输出的开始和结束提供了一个友好的访问接口。来看下程序handlers.py:
classHandler:
'''
'''
defcallback(self,prefix,name,*args):
method=getattr(self,prefix+name,None)
ifcallable(method):returnmethod(*args)
defstart(self,name):
self.callback('start_',name)
defend(self,name):
self.callback('end_',name)
defsub(self,name):
defsubstitution(match):
result=self.callback('sub_',name,match)
ifresultisNone:match.group(0)
returnresult
returnsubstitution
classHTMLRenderer(Handler): '''
''' defstart_document(self): print'<html><head><title>...</title></head><body>' defend_document(self): print'</body></html>' defstart_paragraph(self): print'<p>' defend_paragraph(self): print'</p>' defstart_heading(self): print'<h2>' defend_heading(self): print'</h2>' defstart_list(self): print'<ul>' defend_list(self): print'</ul>' defstart_listitem(self): print'<li>' defend_listitem(self): print'</li>' defstart_title(self): print'<h1>' defend_title(self): print'</h1>' defsub_emphasis(self,match): return'<em>%s</em>'%match.group(1) defsub_url(self, match): return'<ahref="%s">%s</a>'%(match.group(1),match.group(1)) defsub_mail(self, match): return'<ahref="mailto:%s">%s</a>'%(match.group(1),match.group(1)) deffeed(self,data): printdata