Lucas Kent e39465ad2f Changes to be committed:
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
2022-11-02 08:40:01 -04:00

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;
}
}
},
{
});