zoukankan      html  css  js  c++  java
  • arTemplate解析语法

    模板解析语法

    defaults.parser = function (code, options) {
        // var match = code.match(/([w$]*)(.*)/);
        // 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;
    };
    请把你的疑问评论在下方。
  • 相关阅读:
    Java网络编程注意事项3
    存储在图的形式——邻接矩阵(排列)
    C++ Primer 学习笔记_35_STL实践与分析(9)--map种类(在)
    [Django1.6]south于django1.6使用
    《Javascript权威指南》13号学习笔记:使用日期和时间
    POJ 1699 Best Sequence (DFS+预处理)
    第五蓝桥杯 蚂蚁冷
    Mac OS X 在捕捉AppLAN通信包
    面向对象、内存模型、动态绑定
    链接器与分离编译
  • 原文地址:https://www.cnblogs.com/zzcit/p/5603108.html
Copyright © 2011-2022 走看看