Вход Регистрация
Файл: Space race/libs/Editor_files/Parser.js
Строк: 110
<?php
var pgli pgli || {};
pgli.lang pgli.lang || {};

pgli.lang.Parser gamecore.Base.extend('Parser',
{

    
xStruct: {
        
"scale"0,
        
"x"1,
        
"y"2,
        
"width"3,
        
"height"4
    
},


    
patternVar:/@(w+)/g,
    
patternMethod: /#(w+)((([^)]+)))/g,

    
debug1,


    
parseExpression: function(stringscopexform)
    {
        static = 
pgli.lang.Parser;

        var 
self this;
        var 
orig string;
        var 
= (scope !== null && typeof(scope) !== "undefined")
        var 
= (xform !== null && typeof(xform) !== "undefined" && xform.length 0)

        if(
typeof(string) != "string")
            return 
string;

        if(
scope != undefined)
        {
            
string string.replace(this.patternVar,function(match,varName)
            {
                if(
&& varName in static.xStruct)
                    return 
xform[static.xStruct[varName]];
                else if(
&& varName in scope)
                    return 
scope[varName]
                else
                    return 
0
            
});
        }

        
string string.replace(this.patternMethod,function(match,methodName,a,params)
        {
            if(
self.debug 2console.log(arguments);
            return 
self.execFunction(methodNameparams);
        });

        if(
self.debug 2console.log("#Parsed expr: '"+string+"' from '"+orig+"'");
        
        try {
            return eval(string);
        } catch (
e) {
            return 
string;
        }
        

    },

    
parseRepeat: function(stringscope)
    {
        var 
items string.split(" ");

        if(
items.length != 4)
            throw 
"Syntax error in repeat expression";

        if(
self.debug 2console.warn(items[0].substr(1))
        if(
self.debug 2console.warn(Number(this.parseExpression(items[1], scope)))
        if(
self.debug 2console.warn(items[2])
        if(
self.debug 2console.warn(Number(this.parseExpression(items[3], scope)))

        return new 
pgli.lang.Iterator(
            
items[0].substr(1),
            
Number(this.parseExpression(items[1], scope)),
            
items[2],
            
Number(this.parseExpression(items[3], scope))
        );
    },

    
parseModule: function(string)
    {
        try
        {
            return 
JSON.parse(string);
        }
        catch(
e)
        {
            
trace("(!) Syntax error in module.");
            return {
error:"unable to parse module"};
        }
    },

    
execFunction: function(methodNameparams)
    {
        var 
hasP params != undefined;
        var 
hasP params.replace(" """).split(',') : [];

        if(
methodName == "random")
        {
            var 
Math.random();
            if(
hasP && p.length == 2) try
            {
                var 
min = eval(p[0]);
                var 
max = eval(p[1]);
                
Math.round(* (max-min) + min);
            } catch(
e) {
                
console.warn('Bad method format: '+methodName+' / '+params);
                return 
0;
            }
            return 
r;
        }
        else if(
methodName == "mod")
        {
            if(
hasP && p.length == 2) try
            {
                var 
base = eval(p[0]);
                var 
div = eval(p[1]);
                if(
div == 0) throw "Divide by 0";
                return 
Math.floor(base/div);
            } catch(
e) {
                
console.warn('Bad method format: '+methodName+' / '+params);
            }
            return 
0;
        }
        else
        {
            
console.warn("Unsupported method : "+methodName);
            return 
0;
        }
    }
},
{

});
?>
Онлайн: 4
Реклама