new file: Files/flashplayer_32_sa.exe new file: favicon.ico new file: globe.gif new file: imgs/download.png new file: imgs/zuck.jpg new file: index.html new file: other.ico new file: script.js new file: site.webmanifest new file: sitemap.html new file: styles/backround.css new file: styles/border.css new file: styles/fonts/Titillium_Web/OFL.txt new file: styles/fonts/Titillium_Web/TitilliumWeb-Black.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-Bold.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-BoldItalic.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-ExtraLight.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-ExtraLightItalic.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-Italic.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-Light.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-LightItalic.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-Regular.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-SemiBold.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-SemiBoldItalic.ttf new file: styles/fonts/webfontkit-20221027-163353/generator_config.txt new file: styles/fonts/webfontkit-20221027-163353/specimen_files/grid_12-825-55-15.css new file: styles/fonts/webfontkit-20221027-163353/specimen_files/specimen_stylesheet.css new file: styles/fonts/webfontkit-20221027-163353/stylesheet.css new file: styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-demo.html new file: styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-webfont.woff new file: styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-webfont.woff2 new file: styles/fonts/webfontkit-20221027-165950/generator_config.txt new file: styles/fonts/webfontkit-20221027-165950/specimen_files/grid_12-825-55-15.css new file: styles/fonts/webfontkit-20221027-165950/specimen_files/specimen_stylesheet.css new file: styles/fonts/webfontkit-20221027-165950/stylesheet.css new file: styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-demo.html new file: styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-webfont.woff new file: styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-webfont.woff2 new file: styles/style.css new file: tools/2048/.gitignore new file: tools/2048/.jshintrc new file: tools/2048/CONTRIBUTING.md new file: tools/2048/LICENSE.txt new file: tools/2048/README.md new file: tools/2048/Rakefile new file: tools/2048/favicon.ico new file: tools/2048/index.html new file: tools/2048/js/animframe_polyfill.js new file: tools/2048/js/application.js new file: tools/2048/js/bind_polyfill.js new file: tools/2048/js/classlist_polyfill.js new file: tools/2048/js/game_manager.js new file: tools/2048/js/grid.js new file: tools/2048/js/html_actuator.js new file: tools/2048/js/keyboard_input_manager.js new file: tools/2048/js/local_storage_manager.js new file: tools/2048/js/tile.js new file: tools/2048/meta/apple-touch-icon.png new file: tools/webretro/cores/neocd_libretro.js new file: tools/webretro/cores/neocd_libretro.wasm new file: tools/webretro/cores/nestopia_libretro.js new file: tools/webretro/cores/nestopia_libretro.wasm new file: tools/webretro/cores/o2em_libretro.js new file: tools/webretro/cores/o2em_libretro.wasm new file: tools/webretro/cores/opera_libretro.js new file: tools/webretro/cores/opera_libretro.wasm
141 lines
2.8 KiB
JavaScript
141 lines
2.8 KiB
JavaScript
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,
|
|
|
|
debug: 1,
|
|
|
|
|
|
parseExpression: function(string, scope, xform)
|
|
{
|
|
static = pgli.lang.Parser;
|
|
|
|
var self = this;
|
|
var orig = string;
|
|
var s = (scope !== null && typeof(scope) !== "undefined")
|
|
var x = (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(x && varName in static.xStruct)
|
|
return xform[static.xStruct[varName]];
|
|
else if(s && varName in scope)
|
|
return scope[varName]
|
|
else
|
|
return 0
|
|
});
|
|
}
|
|
|
|
string = string.replace(this.patternMethod,function(match,methodName,a,params)
|
|
{
|
|
if(self.debug < 2) console.log(arguments);
|
|
return self.execFunction(methodName, params);
|
|
});
|
|
|
|
if(self.debug < 2) console.log("#Parsed expr: '"+string+"' from '"+orig+"'");
|
|
|
|
try {
|
|
return eval(string);
|
|
} catch (e) {
|
|
return string;
|
|
}
|
|
|
|
|
|
},
|
|
|
|
parseRepeat: function(string, scope)
|
|
{
|
|
var items = string.split(" ");
|
|
|
|
if(items.length != 4)
|
|
throw "Syntax error in repeat expression";
|
|
|
|
if(self.debug < 2) console.warn(items[0].substr(1))
|
|
if(self.debug < 2) console.warn(Number(this.parseExpression(items[1], scope)))
|
|
if(self.debug < 2) console.warn(items[2])
|
|
if(self.debug < 2) console.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(methodName, params)
|
|
{
|
|
var hasP = params != undefined;
|
|
var p = hasP ? params.replace(" ", "").split(',') : [];
|
|
|
|
if(methodName == "random")
|
|
{
|
|
var r = Math.random();
|
|
if(hasP && p.length == 2) try
|
|
{
|
|
var min = eval(p[0]);
|
|
var max = eval(p[1]);
|
|
r = Math.round(r * (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;
|
|
}
|
|
}
|
|
},
|
|
{
|
|
|
|
});
|
|
|
|
|