python的即时标记项目练习笔记

628次阅读  |  发布于5年以前

这是《python基础教程》后面的实践,照着写写,一方面是来熟悉python的代码方式,另一方面是练习使用python中的基本的以及非基本的语法,做到熟能生巧。

这个项目一开始比较简单,不过重构之后就有些复杂了,但是更灵活了。

按照书上所说,重构之后的程序,分为四个模块:处理程序模块,过滤器模块,规则(其实应该是处理规则),语法分析器。

先来说处理程序模块,这个模块的作用有两个,一个是提供那些固定的html标记的输出(每一个标记都有start和end),另一个是对这个标记输出的开始和结束提供了一个友好的访问接口。来看下程序handlers.py:

复制代码 代码如下:

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: match.group(0)
return result
return substitution

class HTMLRenderer(Handler):
'''

'''  
def start_document(self):  
    print '<html><head><title>...</title></head><body>'  
def end_document(self):  
    print '</body></html>'  
def start_paragraph(self):  
    print '<p>'  
def end_paragraph(self):  
    print '</p>'  
def start_heading(self):  
    print '<h2>'  
def end_heading(self):  
    print '</h2>'  
def start_list(self):  
    print '<ul>'  
def end_list(self):  
    print '</ul>'  
def start_listitem(self):  
    print '<li>'  
def end_listitem(self):  
    print '</li>'  
def start_title(self):  
    print '<h1>'  
def end_title(self):  
    print '</h1>'  
def sub_emphasis(self, match):  
    return '<em>%s</em>' % match.group(1)  
def sub_url(self,  match):  
    return '<a href="%s">%s</a>' % (match.group(1),match.group(1))  
def sub_mail(self,  match):  
    return '<a href="mailto:%s">%s</a>' % (match.group(1),match.group(1))  
def feed(self, data):  
    print data  

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8