⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lang.js

📁 CRM全套解决方案,全部源代码,支持简体中文
💻 JS
📖 第 1 页 / 共 2 页
字号:
            return this._working.length == 0;
        }
        
        publ.nextNonWS = function(nlIsWS){
            var tkn = this.next();
            while((tkn.type == mod.tokens.WSP) ||  (nlIsWS && (tkn.type == mod.tokens.NL))){
                tkn = this.next();
            }
            return tkn;
        }
        
        /**
            Returns the next token.
            @return The next token.
        */
        publ.next = function(){
            if(this._working ==""){
                throw new mod.Exception("Empty");
            } 
            var s1 = this._working.charAt(0);
            var s2 = s1 + this._working.charAt(1);
            var s3 = s2 + this._working.charAt(2);
            var rslt=[];
            switch(s1){
                case '"': case "'":
                    try{
                        s1 = extractQString(this._working);
                        rslt= new mod.Token(mod.tokens.STR, s1, this._pos);
                    }catch(e){
                        rslt= new mod.Token(mod.tokens.ERR, s1, this._pos, e);
                    }
                    break;
                case "\n": case "\r":
                    rslt =new mod.Token(mod.tokens.NL, s1, this._pos);
                    break;   
                case "-": //check for negative numbers
                    s1=this._working.match(/-\d+\.\d+|-\d+/)[0];
                    if(/^-\d|-\d\.\d/.test(s1)){//number
                        rslt =  new mod.Token(mod.tokens.NUM, s1, this._pos);
                        break;
                    }
                
                case "{": case "}": case "[": case "]": case "(": case ")":
                case ":": case ",": case ".": case ";":
                case "*": case "-": case "+":
                case "=": case "<": case ">":  case "!":   
                case "|": case "&":
                    switch(s2){
                        case "==": case "!=": case "<>":  case "<=": case ">=":case "||": case "&&":
                            rslt = new mod.Token(mod.tokens.OP, s2, this._pos);
                            break;
                        default:
                            rslt = new mod.Token(mod.tokens.OP, s1, this._pos);
                    }
                    break;
                case "/":
                    if(s2 == "//" || s3 =="///"){
                        s1 = extractSLComment(this._working);
                        rslt = new mod.Token(s1.charAt(2) != "/" ? mod.tokens.COMMENT:mod.tokens.DOCCOMMENT, s1, this._pos);
                    }else if(s2 == "/*" || s3 =="/**"){
                        try{
                            s1 = extractMLComment(this._working);
                            rslt = new mod.Token(s3 !="/**" ? mod.tokens.COMMENT: mod.tokens.DOCCOMMENT, s1, this._pos);
                        }catch(e){
                            rslt= new mod.Token(mod.tokens.ERR, s3 != "/**" ? s2 : s3, this._pos, e);
                        }
                    }else{
                        try{
                            s1 = extractRegExp(this._working);
                            rslt  = new mod.Token(mod.tokens.REGEXP, s1, this._pos);
                        }catch(e){
                            rslt = new mod.Token(mod.tokens.OP, s1, this._pos, e);
                        }
                    }
                    break;
                case " ":
                    var i = 0;
                    var s="";
                    while(this._working.charAt(i) == " "){
                        s+=" ";
                        i++;
                    }
                    rslt = new mod.Token(mod.tokens.WSP, s, this._pos);
                    break;
                default:
                    s1=this._working.match(/\d+\.\d+|\d+|\w+/)[0];
                    if(/^\d|\d\.\d/.test(s1)){//number
                        rslt =  new mod.Token(mod.tokens.NUM, s1, this._pos);
                    }else{//name
                        rslt =new mod.Token(mod.tokens.NAME, s1, this._pos);
                    }
            }
            
            this._working=this._working.slice(rslt.value.length);
            this._pos += rslt.value.length;
            return rslt;
        }
        
        var searchQoute = function(s, q){
            if(q=="'"){
                return s.search(/[\\']/);
            }else{
                return s.search(/[\\"]/);
            }
        }
        
        var extractQString=function(s){
            if(s.charAt(0) == "'"){
                var q="'";
            }else{
                var q='"';
            }
            s=s.slice(1);
            var rs="";
            var p= searchQoute(s, q);
            while(p >= 0){
                if(p >=0){
                    if(s.charAt(p) == q){
                        rs += s.slice(0, p+1);
                        s = s.slice(p+1);
                        return q + rs;
                    }else{
                        rs+=s.slice(0, p+2);
                        s = s.slice(p+2);
                    }
                }
                p = searchQoute(s, q);
            }
            throw new mod.Exception("End of String expected.");
        }
        
        var extractSLComment=function(s){
            var p = s.search(/\n/);
            if(p>=0){
                return s.slice(0,p+1);
            }else{
                return s;
            }
        }
        
        var extractMLComment=function(s){
            var p = s.search(/\*\//);
            if(p>=0){
                return s.slice(0,p+2);
            }else{
                throw new mod.Exception("End of comment expected.");
            }
        }
        
        var extractRegExp=function(s){
            var p=0;
            for(var i=0;i<s.length;i++){
                if(s.charAt(i) == "/"){
                    p=i;
                }
                if(s.charAt(i) == "\n"){
                    i = s.length;
                }
            }
            return s.slice(0,p+1);
        }
    })
    
    /**
        Converts an object to JSON.
    */
    Object.prototype.toJSON = function(){
        var v=[];
        for(attr in this){
            if(typeof this[attr] != "function"){
                v.push('"' + attr + '": ' + mod.objToJson(this[attr]));
            }
        }
        return "{" + v.join(", ") + "}";
    }
    
    /**
        Converts a String to JSON.
    */
    String.prototype.toJSON = function(){
        var s = '"' + this.replace(/(["\\])/g, '\\$1') + '"';
        s = s.replace(/(\n)/g,"\\n");
        return s;
    }
    
    /**
        Converts a Number to JSON.
    */
    Number.prototype.toJSON = function(){
        return this.toString();
    }
    
    /**
        Converts a Boolean to JSON.
    */
    Boolean.prototype.toJSON = function(){
        return this.toString();
    }
    
    /**
        Converts a Date to JSON.
        Date representation is not defined in JSON.
    */
    Date.prototype.toJSON= function(){
        var padd=function(s, p){
            s=p+s
            return s.substring(s.length - p.length)
        }
        var y = padd(this.getUTCFullYear(), "0000");
        var m = padd(this.getUTCMonth() + 1, "00");
        var d = padd(this.getUTCDate(), "00");
        var h = padd(this.getUTCHours(), "00");
        var min = padd(this.getUTCMinutes(), "00");
        var s = padd(this.getUTCSeconds(), "00");
        
        var isodate = y +  m  + d + "T" + h +  ":" + min + ":" + s
        
        return '{"jsonclass":["sys.ISODate", ["' + isodate + '"]]}';
    }
    
    /**
        Converts an Array to JSON.
    */
    Array.prototype.toJSON = function(){
        var v = [];
        for(var i=0;i<this.length;i++){
            v.push(mod.objToJson(this[i])) ;
        }
        return "[" + v.join(", ") + "]";
    }
        
    mod.test=function(){
        try{
            print(mod.jsonToObj("['sds', -12377,-1212.1212, 12, '-2312']").toJSON());
        }catch(e){
            print(e.toTraceString());
        }
        
    }
    
})

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -