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

-- 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
      • 下面只显示主要部分,注释什么地去掉了。同时模板变量的定义保持原样。

   1 #coding=utf-8
   2 from Template import T
   3 
   4 main=T("""# -*- coding: utf-8 -*-
   5 #...略去注释
   6 
   7 from ###Lprotoname###.message import ###MsgBase###
   8 import struct
   9 
  10 class ###Uprotoname###PMessage(###MsgBase###.ByteMessage):
  11     \"\"\"二进制流连接消息基类\"\"\"
  12     def __init__(self):
  13         # 消息头
  14         self.head = ###MsgBase###.ByteMessageHead(self)
  15         # 消息体
  16         self.body = ###MsgBase###.ByteMessageBody(self)
  17         # 消息工具
  18         self.msgutilcls = ###Uprotoname###PMessageUtil
  19         # 协议名称
  20         self.protocolname = '###Lprotoname###p'
  21         # 当前的消息名称
  22         self.msgname = ''
  23 
  24 ###Commands###
  25 
  26 class ###Uprotoname###PMessageUtil(###MsgBase###.ByteMessageUtil):
  27     \"\"\"二进制长连接消息处理工具类\"\"\"
  28     def __init__(self):
  29         pass
  30 
  31 # 消息定义
  32 ###Uprotoname###PMessageUtil.commandinfo = {
  33 ###Commandsinfo###
  34     }
  35 
  36 # 通过名称查出消息ID的结构定义
  37 ###Uprotoname###PMessageUtil.nametoid = {}
  38 for k in ###Uprotoname###PMessageUtil.commandinfo.keys():
  39     ###Uprotoname###PMessageUtil.nametoid[###Uprotoname###PMessageUtil.commandinfo[k]] = k
  40 
  41 """)
  42 
  43 Commands = T("""    def pack_###Lprotoname###p_###commandname###(self, fields):
  44 ###packcontent###
  45 
  46     def unpack_###Lprotoname###p_###commandname###(self, fields):
  47 ###unpackcontent###
  48 
  49 """)
  50 
  51 Lprotoname = T("###lpname###")
  52 Uprotoname = T("###upname###")
  53 packcontent = T('')
  54 unpackcontent = T('')
  55 Commandsinfo=T("    ###flag### : '###name###',\n")