- 论坛徽章:
- 0
|
本帖最后由 kk861123 于 2012-09-20 11:01 编辑
RT... tks~
再详细说明一下情况:
我有一个模板文件类似Template模块的语法,但因为可视性不好,所以想解析成pod格式便于观看和检查。
现在的做法是,由于模板的解析程序已经很成熟了,所以就直接拿来解析成对应perl数据结构,然后使用模块对数据结构重新解析成pod模式,解析的还不是很好效果也不怎么样,所以上来请教!
个人解析过程举例:
1. 模板文件如下:- Dear <t:var "first_name"/> <t:var "last_name"/>,
- This is paragraph ONE,this is a<t:if "$*->{PIP}"> PIP</t:if> card.
- <t:if "$*->{COND1}">
- This is paragraph TWO
- blabla...
- <t:elsif "$*->{COND1}">
- This is paragraph THREE
- blabla...
- <t:elsif "$*->{COND1}">
- This is paragraph THREE
- blabla...
- </t:if>
- Thanks!
复制代码 2. 解析模板文件为:- $VAR1 = [
- {
- 'content' => 'Dear ',
- 'type' => 'const'
- },
- {
- 'content' => ' ',
- 'type' => 'var',
- 'attr' => 'first_name'
- },
- {
- 'content' => ',
- This is paragraph ONE,this is a',
- 'type' => 'var',
- 'attr' => 'last_name'
- },
- {
- 'conds' => [
- '$root->{PIP}'
- ],
- 'type' => 'cond',
- 'queues' => [
- [
- {
- 'content' => ' PIP',
- 'type' => 'const'
- }
- ]
- ]
- },
- {
- 'content' => ' card.
- ',
- 'type' => 'const'
- },
- {
- 'conds' => [
- '$root->{COND1}',
- '$root->{COND1}',
- '$root->{COND1}'
- ],
- 'type' => 'cond',
- 'queues' => [
- [
- {
- 'content' => '
- This is paragraph TWO
- blabla...
- ',
- 'type' => 'const'
- }
- ],
- [
- {
- 'content' => '
- This is paragraph THREE
- blabla...
- ',
- 'type' => 'const'
- }
- ],
- [
- {
- 'content' => '
- This is paragraph THREE
- blabla...
- ',
- 'type' => 'const'
- }
- ]
- ]
- },
- {
- 'content' => '
- Thanks!
- ',
- 'type' => 'const'
- }
- ];
复制代码 3. 使用pod: arser 解析上面的数据结构成pod格式,然后输出pod文本,使用perldoc查看这个文本格式如下:
如图暂时指进行了分行和加粗操作。由于文本中含有的一些不可控的空格,所以解析的不完善,还要继续改进。
当然我提供的文本只是一小部分,文件大的情况下是很杂乱的,我只想让格式更清晰显示更明了,便于查看模板逻辑等。因为只对perl这面比较熟就想到了pod,大家有什么其他的建议请不吝赐教! |
|