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