2. 处理程序
通过文本生成器我们得到了一个一个的文本块,然后需要有处理程序对不同的文本块加相应的 HTML 标记,handlers.py 代码如下:
#!/usr/bin/python
encoding: utf-8
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: result = match.group(0)
return result
return substitution
class HTMLRenderer(Handler):
“”"
HTML 处理程序,给文本块加相应的 HTML 标记
“”"
def start_document(self):
print ‘
def end_document(self):
print ‘’
def start_paragraph(self):
print ‘
’
def end_paragraph(self):
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)
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)
PGRpZ-1713608735973)]
[外链图片转存中…(img-yTpMPyMM-1713608735974)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)