含有章节索引的中文 文章模板

-- limodou [DateTime(2004-08-27T01:30:31Z)] TableOfContents

Otter模板测试记录

这是我记录使用meteor生成Otter模板的记录

测试准备

  1. 分析Otter模板的整体框架
    • OtTool.py 为主程序。我先用它生成了一个输出结果,以便进行对照。

    • 分析OtTool.py 的执行过程:先进行文件处理,再根据输入的XML文档进行解析,然后根据提供的模板生成程序。

    • 对于我感兴趣的模板替换处理阅读小新编写的OtTDict.py。
  2. 分析结果如下:
    • 整个模板数据只有一个,而meteor对于每一个模板均需要一个数据字典。当然是可以考虑共用一个。
    • OtTDict.py 确如Zoom.quiet所讲是一个体力活,它完成XML数据字典转换为模板变量值的过程,替换过程是一个通用的方法。不过一些模板的循环处理都是要通过程序才可以实现。编程量相对大。
  3. 测试准备:
    • 只对pcon-pmsg.py进行测试,因此先要将其改成meteor要求的格式。因为在原模板中不能定义子模板,因此还要分离相应的子模板。文件查看:attachment:pcon-pmsg_tmpl.py
      • 下面只显示主要部分,注释什么地去掉了。同时模板变量的定义保持原样。

from ###Lprotoname###.message import ###MsgBase###
import struct

class ###Uprotoname###PMessage(###MsgBase###.ByteMessage):
    \"\"\"二进制流连接消息基类\"\"\"
    def __init__(self):
        # 消息头
        self.head = ###MsgBase###.ByteMessageHead(self)
        # 消息体
        self.body = ###MsgBase###.ByteMessageBody(self)
        # 消息工具
        self.msgutilcls = ###Uprotoname###PMessageUtil
        # 协议名称
        self.protocolname = '###Lprotoname###p'
        # 当前的消息名称
        self.msgname = ''

###Commands###

class ###Uprotoname###PMessageUtil(###MsgBase###.ByteMessageUtil):
    \"\"\"二进制长连接消息处理工具类\"\"\"
    def __init__(self):
        pass

# 消息定义
###Uprotoname###PMessageUtil.commandinfo = {
###Commandsinfo###
    }

# 通过名称查出消息ID的结构定义
###Uprotoname###PMessageUtil.nametoid = {}
for k in ###Uprotoname###PMessageUtil.commandinfo.keys():
    ###Uprotoname###PMessageUtil.nametoid[###Uprotoname###PMessageUtil.commandinfo[k]] = k

""")

Commands = T("""    def pack_###Lprotoname###p_###commandname###(self, fields):
###packcontent###

    def unpack_###Lprotoname###p_###commandname###(self, fields):
###unpackcontent###

""")

Lprotoname = T("###lpname###")
Uprotoname = T("###upname###")
packcontent = T('')
unpackcontent = T('')
Commandsinfo=T("    ###flag### : '###name###',\n")