arTemplate解析语法
模板解析语法
defaults.parser = function (code, options) {
    // var match = code.match(/([\w\$]*)(\b.*)/);
    // var key = match[1];
    // var args = match[2];
    // var split = args.split(' ');
    // split.shift();
    code = code.replace(/^\s/, '');
    var split = code.split(' ');
    var key = split.shift();
    var args = split.join(' ');    
    switch (key) {
        case 'if':
            code = 'if(' + args + '){';
            break;
        case 'else':
            if (split.shift() === 'if') {
                split = ' if(' + split.join(' ') + ')';
            } else {
                split = '';
            }
            code = '}else' + split + '{';
            break;
        case '/if':
            code = '}';
            break;
        case 'each':
            var object = split[0] || '$data';
            var as     = split[1] || 'as';
            var value  = split[2] || '$value';
            var index  = split[3] || '$index';
            var param   = value + ',' + index;
            if (as !== 'as') {
                object = '[]';
            }
            code =  '$each(' + object + ',function(' + param + '){';
            break;
        case '/each':
            code = '});';
            break;
        case 'echo':
            code = 'print(' + args + ');';
            break;
        case 'print':
        case 'include':
            code = key + '(' + split.join(',') + ');';
            break;
        default:
            // 过滤器(辅助方法)
            // {{value | filterA:'abcd' | filterB}}
            // >>> $helpers.filterB($helpers.filterA(value, 'abcd'))
            // TODO: {{ddd||aaa}} 不包含空格
            if (/^\s*\|\s*[\w\$]/.test(args)) {
                var escape = true;
                // {{#value | link}}
                if (code.indexOf('#') === 0) {
                    code = code.substr(1);
                    escape = false;
                }
                var i = 0;
                var array = code.split('|');
                var len = array.length;
                var val = array[i++];
                for (; i < len; i ++) {
                    val = filtered(val, array[i]);
                }
                code = (escape ? '=' : '=#') + val;
            // 即将弃用 {{helperName value}}
            } else if (template.helpers[key]) {
                code = '=#' + key + '(' + split.join(',') + ');';
            // 内容直接输出 {{value}}
            } else {
                code = '=' + code;
            }
            break;
    }
    return code;
};
arTemplate解析语法的更多相关文章
- [转载]ECMall模板解析语法与机制
		
ECMall模板解析语法与机制 2011-05-22 在ECMall模板中,用"{"开头,以"}"结尾就构成一个标签单元,"{"紧接着的单词 ...
 - lucene_04_解析语法查询
		
解析语法查询就是调用方法查询的原始查询 例如: 查询所有的查询器的语法为:*:*,因为lucene查询是根据term来做的,既是:key:value类型.*:*表示所有域中的所有值. api调用语法解 ...
 - Discuz!模板解析语法
		
<!--{eval echo autostart("); }--> PHP中使用template()函数显示已存在模板 在Discuz!程序执行中可以通过 include tem ...
 - 2016 - 1 - 23 xml解析 -- 语法简介
		
一: XML的概念 1. 一种可拓展标记语言 2. 与json一样,也是一种常用的数据交互格式 3. 一般也叫XML文档---XML Document 二: XML语法 1.一个完整的XML文档一 ...
 - [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析
		
[WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析 标签: webkit内核JavaScriptCore 2015-03-26 23:26 2285 ...
 - JSP编译成Servlet(一)语法树的生成——语法解析
		
一般来说,语句按一定规则进行推导后会形成一个语法树,这种树状结构有利于对语句结构层次的描述.同样Jasper对JSP语法解析后也会生成一棵树,这棵树各个节点包含了不同的信息,但对于JSP来说解析后的语 ...
 - Sublime插件支持Sass编译和Babel解析ES6 & .sublime-build文件初探
		
用Sublime Text蛮久了,配置配来配去的,每次换电脑都得重头再配过,奈何人老了脑子不中用了,得好好整理一些,下次换电脑就有得参考了.. 同事说,他的WebStorm简直太方便,自身集成了很多方 ...
 - python基础之迭代与解析
		
先简单看一下文件迭代器 >>> f=open('file1') >>> f.readline() "'aaa','bbb','ccc'\n" & ...
 - ecmall模板语法
		
ECMall的模板解析语法介绍 用"{"开头,以"}"结尾就构成一个标签单元 在 2011年07月19日 那天写的 已经有 19105 次阅读了 感谢 ...
 
随机推荐
- 怎么给当前点击的a标签添加一个样式(跳转页面后)
			
怎么给当前点击的a标签添加一个样式(跳转页面后): 方法1. 用cookie记录这个打开的序列号,然后页面在跳转的时候在读出来.方法2. 循环a的链接,然后与location.href去比对,如果相同 ...
 - QT源码剖析之QSS样式表
			
1. "QApplication::setStyleSheet()"设置样式表: 1. 创建新的样式表. 2. 设置新的样式. void QApplication::setStyl ...
 - ASP.NET的三层架构(DAL,BLL,UI)
			
ASP.NET的三层架构(DAL,BLL,UI) BLL 是业务逻辑层 Business Logic Layer DAL 是数据访问层 Data Access Laye ...
 - android app 集成 信鸽推送
			
推送其实挺中意小米推送的,并经用户群占比还是比较大的,奈何拗不过php后端哥们的选型,就只好用信鸽推送了,期间接入过程中也是遇到不少问题,所以记录下来,以后如果还是用信鸽推送的话,估计看看以前的博客, ...
 - 简单的XML和JSON数据的处理
			
一.XML格式装换成json数据格式 using System; using System.Collections.Generic; using System.Linq; using System.W ...
 - JQuery:以name为条件查找
			
例如:$(":input[name='keleyi']") 表示查找的是name为keleyi的表单. var a=$(t).prev(":input[name='dis ...
 - Android启动另一个APP时,注意disable与enable的问题
			
在写游戏sdk时候遇到了一个需要在sdk中通过scheme来启动支付宝的免密支付功能,所以需要在设备中通过包名检查一下支付宝是否存在. 此时遇到了一个问题,在三星设备中可以将app给处于disable ...
 - 简单的Socket通信
			
Socket简介 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 服务端步骤: • socket:创建服务器socket ...
 - 二、ASP.NET MVC Controller 控制器(一:深入解析控制器运行原理)
			
阅读目录: 1.开篇介绍 2.ASP.NETMVC Controller 控制器的入口(Controller的执行流程) 3.ASP.NETMVC Controller 控制器的入口(Controll ...
 - Excel教程(9) - 信息函数
			
CELL 用途:返回某一引用区域的左上角单元格的格式.位置或 内容等信息,该函数主要用于保持与其它电子表格程序的兼容 性. 语法:CELL(info_type,reference) 参数:Info ...