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;
    };
    请把你的疑问评论在下方。
  • 相关阅读:
    -bash: fork: Cannot allocate memory 问题的处理
    Docker top 命令
    docker常见问题修复方法
    The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
    What's the difference between encoding and charset?
    hexcode of é î Latin-1 Supplement
    炉石Advanced rulebook
    炉石bug反馈
    Sidecar pattern
    SQL JOIN
  • 原文地址:https://www.cnblogs.com/zzcit/p/5603108.html
Copyright © 2011-2022 走看看