This repository has been archived on 2024-04-07. You can view files and clone it, but cannot push or open issues or pull requests.
chovy-gm/GMAssetCompiler/Lex.cs

1165 lines
35 KiB
C#

using System;
using System.Collections.Generic;
namespace GMAssetCompiler
{
public class Lex
{
private const int MAX_QUEUE = 100;
private bool m_CaseSensitive;
private string m_Text;
private int m_Index;
private eLex[] m_TokenLookup = new eLex[256];
private eLex[] m_IDLookup = new eLex[256];
private int[] m_HexLookup = new int[256];
private int[] m_BinLookup = new int[256];
private int[] m_DecLookup = new int[256];
private eLex[] m_SymbolLookup1 = new eLex[256];
private eLex[] m_SymbolLookup2 = new eLex[256];
private eLex[] m_LexToken = new eLex[100];
private string[] m_LexText = new string[100];
private double[] m_LexValue = new double[100];
private int m_Head;
private int m_Tail;
private YYObfuscate m_pObfuscate;
private Dictionary<string, eLex> m_CommandLookup;
public string yyText
{
get
{
return m_LexText[m_Tail];
}
}
public double yyValue
{
get
{
return m_LexValue[m_Tail];
}
}
public eLex yyToken
{
get
{
return m_LexToken[m_Tail];
}
}
public string Text
{
get
{
return m_Text;
}
set
{
m_Text = value;
m_Index = 0;
m_Tail = 0;
m_Head = 0;
if (!CaseSensitive)
{
m_Text = m_Text.ToLower();
}
}
}
public bool CaseSensitive
{
get
{
return m_CaseSensitive;
}
set
{
m_CaseSensitive = value;
}
}
public void AddSymbol(string _s, eLex _token)
{
m_SymbolLookup1[_s[0]] = m_TokenLookup[_s[0]];
m_SymbolLookup2[_s[1]] = _token;
}
public void AddCommand(string _cmd, eLex _token)
{
eLex value;
if (!m_CommandLookup.TryGetValue(_cmd, out value))
{
m_CommandLookup.Add(_cmd, _token);
}
}
public Lex(YYObfuscate _pObfuscate)
{
m_pObfuscate = _pObfuscate;
CaseSensitive = false;
m_TokenLookup[124] = eLex.Bar;
m_TokenLookup[63] = eLex.QuestionMark;
m_TokenLookup[33] = eLex.Exclamation;
m_TokenLookup[34] = eLex.Quotes;
m_TokenLookup[39] = eLex.SingleQuotes;
m_TokenLookup[36] = eLex.Dollar;
m_TokenLookup[37] = eLex.Percent;
m_TokenLookup[94] = eLex.Carrot;
m_TokenLookup[38] = eLex.Ampersand;
m_TokenLookup[42] = eLex.Star;
m_TokenLookup[40] = eLex.LeftBracket;
m_TokenLookup[41] = eLex.RightBracket;
m_TokenLookup[91] = eLex.LeftSquareBracket;
m_TokenLookup[93] = eLex.RightSquareBracket;
m_TokenLookup[45] = eLex.Minus;
m_TokenLookup[43] = eLex.Plus;
m_TokenLookup[61] = eLex.Equals;
m_TokenLookup[47] = eLex.Divide;
m_TokenLookup[44] = eLex.Comma;
m_TokenLookup[58] = eLex.Colon;
m_TokenLookup[59] = eLex.SemiColon;
m_TokenLookup[123] = eLex.LCB;
m_TokenLookup[125] = eLex.RCB;
m_TokenLookup[60] = eLex.LessThan;
m_TokenLookup[62] = eLex.GreaterThan;
m_TokenLookup[46] = eLex.Dot;
m_TokenLookup[126] = eLex.Not;
m_TokenLookup[49] = eLex.Decimal;
m_TokenLookup[50] = eLex.Decimal;
m_TokenLookup[51] = eLex.Decimal;
m_TokenLookup[52] = eLex.Decimal;
m_TokenLookup[53] = eLex.Decimal;
m_TokenLookup[54] = eLex.Decimal;
m_TokenLookup[55] = eLex.Decimal;
m_TokenLookup[56] = eLex.Decimal;
m_TokenLookup[57] = eLex.Decimal;
m_TokenLookup[48] = eLex.Decimal;
m_TokenLookup[10] = eLex.NewLine;
m_TokenLookup[13] = eLex.NewLine;
m_TokenLookup[9] = eLex.WhiteSpace;
m_TokenLookup[32] = eLex.WhiteSpace;
AddSymbol("==", eLex.EqualEqual);
AddSymbol("!=", eLex.NotEqual);
AddSymbol("&=", eLex.AndEqual);
AddSymbol("~=", eLex.EorEqual);
AddSymbol("-=", eLex.MinusEqual);
AddSymbol("+=", eLex.PlusEqual);
AddSymbol("^=", eLex.XorEqual);
AddSymbol("&&", eLex.AndAnd);
AddSymbol("||", eLex.OrOr);
AddSymbol("<<", eLex.ShiftLeft);
AddSymbol(">>", eLex.ShiftRight);
for (int i = 65; i <= 90; i++)
{
m_IDLookup[i] = eLex.ID;
}
for (int j = 97; j <= 122; j++)
{
m_IDLookup[j] = eLex.ID;
}
m_IDLookup[48] = eLex.ID;
m_IDLookup[49] = eLex.ID;
m_IDLookup[50] = eLex.ID;
m_IDLookup[51] = eLex.ID;
m_IDLookup[52] = eLex.ID;
m_IDLookup[53] = eLex.ID;
m_IDLookup[54] = eLex.ID;
m_IDLookup[55] = eLex.ID;
m_IDLookup[56] = eLex.ID;
m_IDLookup[57] = eLex.ID;
m_IDLookup[95] = eLex.ID;
m_IDLookup[64] = eLex.ID;
for (int num = m_HexLookup.Length - 1; num >= 0; num--)
{
m_HexLookup[num] = -1;
}
m_HexLookup[48] = 0;
m_HexLookup[49] = 1;
m_HexLookup[50] = 2;
m_HexLookup[51] = 3;
m_HexLookup[52] = 4;
m_HexLookup[53] = 5;
m_HexLookup[54] = 6;
m_HexLookup[55] = 7;
m_HexLookup[56] = 8;
m_HexLookup[57] = 9;
m_HexLookup[65] = 10;
m_HexLookup[66] = 11;
m_HexLookup[67] = 12;
m_HexLookup[68] = 13;
m_HexLookup[69] = 14;
m_HexLookup[70] = 15;
m_HexLookup[97] = 10;
m_HexLookup[98] = 11;
m_HexLookup[99] = 12;
m_HexLookup[100] = 13;
m_HexLookup[101] = 14;
m_HexLookup[102] = 15;
for (int num2 = m_BinLookup.Length - 1; num2 >= 0; num2--)
{
m_BinLookup[num2] = -1;
}
m_BinLookup[48] = 0;
m_BinLookup[49] = 1;
for (int num3 = m_DecLookup.Length - 1; num3 >= 0; num3--)
{
m_DecLookup[num3] = -1;
}
m_DecLookup[48] = 0;
m_DecLookup[49] = 1;
m_DecLookup[50] = 2;
m_DecLookup[51] = 3;
m_DecLookup[52] = 4;
m_DecLookup[53] = 5;
m_DecLookup[54] = 6;
m_DecLookup[55] = 7;
m_DecLookup[56] = 8;
m_DecLookup[57] = 9;
m_CommandLookup = new Dictionary<string, eLex>();
AddCommand("Object", eLex.reserved);
AddCommand("Function", eLex.reserved);
AddCommand("defineProperty", eLex.reserved);
AddCommand("apply", eLex.reserved);
AddCommand("call", eLex.reserved);
AddCommand("__defineGetter__", eLex.reserved);
AddCommand("__defineSetter__", eLex.reserved);
AddCommand("__implements", eLex.reserved);
AddCommand("__super", eLex.reserved);
AddCommand("function", eLex.reserved2);
AddCommand("return", eLex.reserved2);
AddCommand("typeof", eLex.reserved2);
AddCommand("instanceof", eLex.reserved3);
AddCommand("continue", eLex.reserved);
AddCommand("for", eLex.reserved);
AddCommand("this", eLex.reserved);
AddCommand("var", eLex.reserved2);
AddCommand("true", eLex.reserved);
AddCommand("false", eLex.reserved);
AddCommand("null", eLex.reserved);
AddCommand("new", eLex.reserved2);
AddCommand("delete", eLex.reserved2);
AddCommand("with", eLex.reserved);
AddCommand("if", eLex.reserved2);
AddCommand("else", eLex.reserved2);
AddCommand("switch", eLex.reserved2);
AddCommand("case", eLex.reserved2);
AddCommand("default", eLex.reserved2);
AddCommand("break", eLex.reserved);
AddCommand("try", eLex.reserved);
AddCommand("catch", eLex.reserved);
AddCommand("throw", eLex.reserved2);
AddCommand("toString", eLex.reserved);
AddCommand("valueOf", eLex.reserved);
AddCommand("prototype", eLex.reserved);
AddCommand("constructor", eLex.reserved);
AddCommand("undefined", eLex.reserved);
AddCommand("in", eLex.reserved3);
AddCommand("do", eLex.reserved2);
AddCommand("while", eLex.reserved2);
AddCommand("arguments", eLex.reserved);
AddCommand("length", eLex.reserved);
AddCommand("versionSearch", eLex.reserved);
AddCommand("identity", eLex.reserved);
AddCommand("prop", eLex.reserved);
AddCommand("versionSearchString", eLex.reserved);
AddCommand("appVersion", eLex.reserved);
AddCommand("userAgent", eLex.reserved);
AddCommand("vendor", eLex.reserved);
AddCommand("platform", eLex.reserved);
AddCommand("substring", eLex.reserved);
AddCommand("searchString", eLex.reserved);
AddCommand("localStorage", eLex.reserved);
AddCommand("hasOwnProperty", eLex.reserved);
AddCommand("g_GameMakerHTML5Dir", eLex.reserved);
AddCommand("facebookUI", eLex.reserved);
AddCommand("g_fbAppHomeUrl", eLex.reserved);
AddCommand("g_fbAppId", eLex.reserved);
AddCommand("g_fbAppUrl", eLex.reserved);
AddCommand("g_fbOAuthToken", eLex.reserved);
AddCommand("navigator", eLex.reserved);
AddCommand("browser", eLex.reserved);
AddCommand("dataBrowser", eLex.reserved);
AddCommand("version", eLex.reserved);
AddCommand("searchVersion", eLex.reserved);
AddCommand("dataOS", eLex.reserved);
AddCommand("protocol", eLex.reserved);
AddCommand("host", eLex.reserved);
AddCommand("pathname", eLex.reserved);
AddCommand("location", eLex.reserved);
AddCommand("send", eLex.reserved);
AddCommand("status", eLex.reserved);
AddCommand("shiftKey", eLex.reserved);
AddCommand("char", eLex.reserved);
AddCommand("repeat", eLex.reserved);
AddCommand("elementFromPoint", eLex.reserved);
AddCommand("opera", eLex.reserved);
AddCommand("write", eLex.reserved);
AddCommand("open", eLex.reserved);
AddCommand("XMLHttpRequest", eLex.reserved);
AddCommand("ActiveXObject", eLex.reserved);
AddCommand("setRequestHeader", eLex.reserved);
AddCommand("responseText", eLex.reserved);
AddCommand("XDomainRequest", eLex.reserved);
AddCommand("status", eLex.reserved);
AddCommand("ontimeout", eLex.reserved);
AddCommand("onload", eLex.reserved);
AddCommand("send", eLex.reserved);
AddCommand("onreadystatechange", eLex.reserved);
AddCommand("onerror", eLex.reserved);
AddCommand("Math", eLex.reserved);
AddCommand("Array", eLex.reserved);
AddCommand("Date", eLex.reserved);
AddCommand("window", eLex.reserved);
AddCommand("document", eLex.reserved);
AddCommand("Boolean", eLex.reserved);
AddCommand("Number", eLex.reserved);
AddCommand("domain", eLex.reserved);
AddCommand("MAX_VALUE", eLex.reserved);
AddCommand("MIN_VALUE", eLex.reserved);
AddCommand("POSITIVE_INFINITY", eLex.reserved);
AddCommand("NEGATIVE_INFINITY", eLex.reserved);
AddCommand("toExponential", eLex.reserved);
AddCommand("toPrecision", eLex.reserved);
AddCommand("toFixed", eLex.reserved);
AddCommand("charAt", eLex.reserved);
AddCommand("charCodeAt", eLex.reserved);
AddCommand("fromCharCode", eLex.reserved);
AddCommand("indexOf", eLex.reserved);
AddCommand("lastIndexOf", eLex.reserved);
AddCommand("match", eLex.reserved);
AddCommand("replace", eLex.reserved);
AddCommand("search", eLex.reserved);
AddCommand("split", eLex.reserved);
AddCommand("substr", eLex.reserved);
AddCommand("substring", eLex.reserved);
AddCommand("toLowerCase", eLex.reserved);
AddCommand("toUpperCase", eLex.reserved);
AddCommand("anchor", eLex.reserved);
AddCommand("big", eLex.reserved);
AddCommand("blink", eLex.reserved);
AddCommand("bold", eLex.reserved);
AddCommand("fixed", eLex.reserved);
AddCommand("fontcolor", eLex.reserved);
AddCommand("fontsize", eLex.reserved);
AddCommand("italics", eLex.reserved);
AddCommand("link", eLex.reserved);
AddCommand("small", eLex.reserved);
AddCommand("strike", eLex.reserved);
AddCommand("sub", eLex.reserved);
AddCommand("sup", eLex.reserved);
AddCommand("Infinity", eLex.reserved);
AddCommand("NaN", eLex.reserved);
AddCommand("decodeURI", eLex.reserved);
AddCommand("decodeURIComponent", eLex.reserved);
AddCommand("encodeURI", eLex.reserved);
AddCommand("encodeURIComponent", eLex.reserved);
AddCommand("escape", eLex.reserved);
AddCommand("eval", eLex.reserved);
AddCommand("sFinite", eLex.reserved);
AddCommand("isNaN", eLex.reserved);
AddCommand("prompt", eLex.reserved);
AddCommand("parseFloat", eLex.reserved);
AddCommand("parseInt", eLex.reserved);
AddCommand("String", eLex.reserved);
AddCommand("unescape", eLex.reserved);
AddCommand("setInterval", eLex.reserved);
AddCommand("JSON", eLex.reserved);
AddCommand("stringify", eLex.reserved);
AddCommand("global", eLex.reserved);
AddCommand("ignoreCase", eLex.reserved);
AddCommand("lastIndex", eLex.reserved);
AddCommand("multiline", eLex.reserved);
AddCommand("source", eLex.reserved);
AddCommand("compile", eLex.reserved);
AddCommand("exec", eLex.reserved);
AddCommand("test", eLex.reserved);
AddCommand("href ", eLex.reserved);
AddCommand("button", eLex.reserved);
AddCommand("pageX", eLex.reserved);
AddCommand("pageY", eLex.reserved);
AddCommand("splice", eLex.reserved);
AddCommand("sort", eLex.reserved);
AddCommand("concat", eLex.reserved);
AddCommand("join", eLex.reserved);
AddCommand("pop", eLex.reserved);
AddCommand("push", eLex.reserved);
AddCommand("reverse", eLex.reserved);
AddCommand("shift", eLex.reserved);
AddCommand("slice", eLex.reserved);
AddCommand("nshift", eLex.reserved);
AddCommand("random", eLex.reserved);
AddCommand("round", eLex.reserved);
AddCommand("LN2", eLex.reserved);
AddCommand("LN10", eLex.reserved);
AddCommand("LOG2E", eLex.reserved);
AddCommand("PI", eLex.reserved);
AddCommand("SQRT1_2", eLex.reserved);
AddCommand("SQRT2", eLex.reserved);
AddCommand("abs", eLex.reserved);
AddCommand("acos", eLex.reserved);
AddCommand("asin", eLex.reserved);
AddCommand("atan", eLex.reserved);
AddCommand("atan2", eLex.reserved);
AddCommand("ceil", eLex.reserved);
AddCommand("cos", eLex.reserved);
AddCommand("exp", eLex.reserved);
AddCommand("floor", eLex.reserved);
AddCommand("log", eLex.reserved);
AddCommand("max", eLex.reserved);
AddCommand("min", eLex.reserved);
AddCommand("pow", eLex.reserved);
AddCommand("sin", eLex.reserved);
AddCommand("sqrt", eLex.reserved);
AddCommand("tan", eLex.reserved);
AddCommand("getDate", eLex.reserved);
AddCommand("getDay", eLex.reserved);
AddCommand("getFullYear", eLex.reserved);
AddCommand("getHours", eLex.reserved);
AddCommand("getMilliseconds", eLex.reserved);
AddCommand("getMinutes", eLex.reserved);
AddCommand("getMonth", eLex.reserved);
AddCommand("getSeconds", eLex.reserved);
AddCommand("getTime", eLex.reserved);
AddCommand("getTimezoneOffset", eLex.reserved);
AddCommand("getUTCDate", eLex.reserved);
AddCommand("getUTCDay", eLex.reserved);
AddCommand("getUTCFullYear", eLex.reserved);
AddCommand("getUTCHours", eLex.reserved);
AddCommand("getUTCMilliseconds", eLex.reserved);
AddCommand("getUTCMinutes", eLex.reserved);
AddCommand("getUTCMonth", eLex.reserved);
AddCommand("getUTCSeconds", eLex.reserved);
AddCommand("parse", eLex.reserved);
AddCommand("setDate", eLex.reserved);
AddCommand("setFullYear", eLex.reserved);
AddCommand("setHours", eLex.reserved);
AddCommand("setMilliseconds", eLex.reserved);
AddCommand("setMinutes", eLex.reserved);
AddCommand("setMonth", eLex.reserved);
AddCommand("setSeconds", eLex.reserved);
AddCommand("setTime", eLex.reserved);
AddCommand("setUTCDate", eLex.reserved);
AddCommand("setUTCFullYear", eLex.reserved);
AddCommand("setUTCHours", eLex.reserved);
AddCommand("setUTCMilliseconds", eLex.reserved);
AddCommand("setUTCMinutes", eLex.reserved);
AddCommand("setUTCMonth", eLex.reserved);
AddCommand("setUTCSeconds", eLex.reserved);
AddCommand("toDateString", eLex.reserved);
AddCommand("toLocaleDateString", eLex.reserved);
AddCommand("toLocaleTimeString", eLex.reserved);
AddCommand("toLocaleString", eLex.reserved);
AddCommand("toTimeString", eLex.reserved);
AddCommand("toUTCString", eLex.reserved);
AddCommand("UTC", eLex.reserved);
AddCommand("toDataURL", eLex.reserved);
AddCommand("ontouchstart", eLex.reserved);
AddCommand("ontouchmove", eLex.reserved);
AddCommand("ontouchend", eLex.reserved);
AddCommand("ontouchcancel", eLex.reserved);
AddCommand("requestAnimationFrame", eLex.reserved);
AddCommand("webkitRequestAnimationFrame", eLex.reserved);
AddCommand("mozRequestAnimationFrame", eLex.reserved);
AddCommand("oRequestAnimationFrame", eLex.reserved);
AddCommand("msRequestAnimationFrame", eLex.reserved);
AddCommand("setTimeout", eLex.reserved);
AddCommand("onload", eLex.reserved);
AddCommand("onerror", eLex.reserved);
AddCommand("requestAnimFrame", eLex.reserved);
AddCommand("innerWidth", eLex.reserved);
AddCommand("innerHeight", eLex.reserved);
AddCommand("console", eLex.reserved);
AddCommand("which", eLex.reserved);
AddCommand("Image", eLex.reserved);
AddCommand("naturalWidth", eLex.reserved);
AddCommand("naturalHeight", eLex.reserved);
AddCommand("complete", eLex.reserved);
AddCommand("crossOrigin", eLex.reserved);
AddCommand("isMap", eLex.reserved);
AddCommand("alt", eLex.reserved);
AddCommand("src", eLex.reserved);
AddCommand("img", eLex.reserved);
AddCommand("ismap", eLex.reserved);
AddCommand("usemap", eLex.reserved);
AddCommand("title", eLex.reserved);
AddCommand("figure", eLex.reserved);
AddCommand("meta", eLex.reserved);
AddCommand("name", eLex.reserved);
AddCommand("generator", eLex.reserved);
AddCommand("data", eLex.reserved);
AddCommand("mageData", eLex.reserved);
AddCommand("context", eLex.reserved);
AddCommand("putImageData", eLex.reserved);
AddCommand("srcElement", eLex.reserved);
AddCommand("currentTarget", eLex.reserved);
AddCommand("cursor", eLex.reserved);
AddCommand("getElementById", eLex.reserved);
AddCommand("appendChild", eLex.reserved);
AddCommand("body", eLex.reserved);
AddCommand("documentElement", eLex.reserved);
AddCommand("clientWidth", eLex.reserved);
AddCommand("clientHeight", eLex.reserved);
AddCommand("getElementsByTagName", eLex.reserved);
AddCommand("getAttribute", eLex.reserved);
AddCommand("target", eLex.reserved);
AddCommand("createEvent", eLex.reserved);
AddCommand("initMouseEvent", eLex.reserved);
AddCommand("dispatchEvent", eLex.reserved);
AddCommand("event", eLex.reserved);
AddCommand("preventDefault", eLex.reserved);
AddCommand("type", eLex.reserved);
AddCommand("changedTouches", eLex.reserved);
AddCommand("screenX", eLex.reserved);
AddCommand("screenY", eLex.reserved);
AddCommand("clientX", eLex.reserved);
AddCommand("clientY", eLex.reserved);
AddCommand("addEventListener", eLex.reserved);
AddCommand("removeEventListener", eLex.reserved);
AddCommand("createElement", eLex.reserved);
AddCommand("onmousemove", eLex.reserved);
AddCommand("onmousedown", eLex.reserved);
AddCommand("onmouseup", eLex.reserved);
AddCommand("onkeydown", eLex.reserved);
AddCommand("onkeyup", eLex.reserved);
AddCommand("onfocusin", eLex.reserved);
AddCommand("onfocusout", eLex.reserved);
AddCommand("style", eLex.reserved);
AddCommand("display", eLex.reserved);
AddCommand("insertBefore", eLex.reserved);
AddCommand("parent", eLex.reserved);
AddCommand("parentNode", eLex.reserved);
AddCommand("removeChild", eLex.reserved);
AddCommand("frames", eLex.reserved);
AddCommand("focus", eLex.reserved);
AddCommand("oncontextmenu", eLex.reserved);
AddCommand("now", eLex.reserved);
AddCommand("visibility", eLex.reserved);
AddCommand("textLength", eLex.reserved);
AddCommand("setSelectionRange", eLex.reserved);
AddCommand("alert", eLex.reserved);
AddCommand("value", eLex.reserved);
AddCommand("confirm", eLex.reserved);
AddCommand("nextSibling", eLex.reserved);
AddCommand("contentWindow", eLex.reserved);
AddCommand("mozImageSmoothingEnabled", eLex.reserved);
AddCommand("globalAlpha", eLex.reserved);
AddCommand("strokeStyle", eLex.reserved);
AddCommand("fillStyle", eLex.reserved);
AddCommand("lineStyle", eLex.reserved);
AddCommand("fillRect", eLex.reserved);
AddCommand("strokeRect", eLex.reserved);
AddCommand("getContext", eLex.reserved);
AddCommand("width", eLex.reserved);
AddCommand("height", eLex.reserved);
AddCommand("offsetLeft", eLex.reserved);
AddCommand("offsetTop", eLex.reserved);
AddCommand("offsetParent", eLex.reserved);
AddCommand("drawImage", eLex.reserved);
AddCommand("left", eLex.reserved);
AddCommand("position", eLex.reserved);
AddCommand("beginPath", eLex.reserved);
AddCommand("arc", eLex.reserved);
AddCommand("fill", eLex.reserved);
AddCommand("lineWidth", eLex.reserved);
AddCommand("moveTo", eLex.reserved);
AddCommand("lineTo", eLex.reserved);
AddCommand("stroke", eLex.reserved);
AddCommand("closePath", eLex.reserved);
AddCommand("setTransform", eLex.reserved);
AddCommand("save", eLex.reserved);
AddCommand("restore", eLex.reserved);
AddCommand("rect", eLex.reserved);
AddCommand("transform", eLex.reserved);
AddCommand("clip", eLex.reserved);
AddCommand("top", eLex.reserved);
AddCommand("hanging", eLex.reserved);
AddCommand("middle", eLex.reserved);
AddCommand("alphabetic", eLex.reserved);
AddCommand("ideographic", eLex.reserved);
AddCommand("bottom", eLex.reserved);
AddCommand("fillText", eLex.reserved);
AddCommand("strokeText", eLex.reserved);
AddCommand("font", eLex.reserved);
AddCommand("textAlign", eLex.reserved);
AddCommand("textBaseline", eLex.reserved);
AddCommand("measureText", eLex.reserved);
AddCommand("HTMLVideoElement", eLex.reserved);
AddCommand("HTMLCanvasElement", eLex.reserved);
AddCommand("HTMLImageElement", eLex.reserved);
AddCommand("video", eLex.reserved);
AddCommand("readyState", eLex.reserved);
AddCommand("onreadystatechange", eLex.reserved);
AddCommand("CanvasPixelArray", eLex.reserved);
AddCommand("shadowColor", eLex.reserved);
AddCommand("shadowOffsetX", eLex.reserved);
AddCommand("shadowOffsetY", eLex.reserved);
AddCommand("shadowBlur", eLex.reserved);
AddCommand("quadraticCurveTo", eLex.reserved);
AddCommand("bezierCurveTo", eLex.reserved);
AddCommand("arcTo", eLex.reserved);
AddCommand("drawSystemFocusRing", eLex.reserved);
AddCommand("drawCustomFocusRing", eLex.reserved);
AddCommand("scrollPathIntoView", eLex.reserved);
AddCommand("isPointInPath", eLex.reserved);
AddCommand("lineCap", eLex.reserved);
AddCommand("lineJoin", eLex.reserved);
AddCommand("miterLimit", eLex.reserved);
AddCommand("globalCompositeOperation", eLex.reserved);
AddCommand("CanvasGradient", eLex.reserved);
AddCommand("CanvasPattern", eLex.reserved);
AddCommand("TextMetrics", eLex.reserved);
AddCommand("addColorStop", eLex.reserved);
AddCommand("createLinearGradient", eLex.reserved);
AddCommand("createRadialGradient", eLex.reserved);
AddCommand("createPattern", eLex.reserved);
AddCommand("toBlob", eLex.reserved);
AddCommand("setAttribute", eLex.reserved);
AddCommand("scale", eLex.reserved);
AddCommand("rotate", eLex.reserved);
AddCommand("translate", eLex.reserved);
AddCommand("clearRect", eLex.reserved);
AddCommand("getImageData", eLex.reserved);
AddCommand("createImageData", eLex.reserved);
AddCommand("getter", eLex.reserved);
AddCommand("setter", eLex.reserved);
AddCommand("Audio", eLex.reserved);
AddCommand("controls", eLex.reserved);
AddCommand("src", eLex.reserved);
AddCommand("load", eLex.reserved);
AddCommand("autobuffer", eLex.reserved);
AddCommand("loop", eLex.reserved);
AddCommand("preload", eLex.reserved);
AddCommand("play", eLex.reserved);
AddCommand("pause", eLex.reserved);
AddCommand("currentTime", eLex.reserved);
AddCommand("volume", eLex.reserved);
AddCommand("cloneNode", eLex.reserved);
AddCommand("canplaythrough", eLex.reserved);
AddCommand("error", eLex.reserved);
AddCommand("onloaddata", eLex.reserved);
AddCommand("canplay", eLex.reserved);
AddCommand("canPlayType", eLex.reserved);
AddCommand("viewportWidth", eLex.reserved);
AddCommand("viewportHeight", eLex.reserved);
AddCommand("createShader", eLex.reserved);
AddCommand("getError", eLex.reserved);
AddCommand("compileShader", eLex.reserved);
AddCommand("shaderSource", eLex.reserved);
AddCommand("getShaderParameter", eLex.reserved);
AddCommand("attachShader", eLex.reserved);
AddCommand("VERTEX_SHADER", eLex.reserved);
AddCommand("FRAGMENT_SHADER", eLex.reserved);
AddCommand("getShaderInfoLog", eLex.reserved);
AddCommand("COMPILE_STATUS", eLex.reserved);
AddCommand("createProgram", eLex.reserved);
AddCommand("getProgramParameter", eLex.reserved);
AddCommand("LINK_STATUS", eLex.reserved);
AddCommand("useProgram", eLex.reserved);
AddCommand("getUniformLocation", eLex.reserved);
AddCommand("getAttribLocation", eLex.reserved);
AddCommand("disable", eLex.reserved);
AddCommand("CULL_FACE", eLex.reserved);
AddCommand("createTexture", eLex.reserved);
AddCommand("bindTexture", eLex.reserved);
AddCommand("pixelStorei", eLex.reserved);
AddCommand("TEXTURE_2D", eLex.reserved);
AddCommand("UNPACK_WEBGL", eLex.reserved);
AddCommand("RGBA", eLex.reserved);
AddCommand("UNSIGNED_BYTE", eLex.reserved);
AddCommand("TEXTURE_MAG_FILTER", eLex.reserved);
AddCommand("TEXTURE_MIN_FILTER", eLex.reserved);
AddCommand("NEAREST", eLex.reserved);
AddCommand("LINEAR", eLex.reserved);
AddCommand("TEXTURE_WRAP_S", eLex.reserved);
AddCommand("TEXTURE_WRAP_T", eLex.reserved);
AddCommand("CLAMP_TO_EDGE", eLex.reserved);
AddCommand("COLOR_BUFFER_BIT", eLex.reserved);
AddCommand("DEPTH_BUFFER_BIT", eLex.reserved);
AddCommand("vertexAttribPointer", eLex.reserved);
AddCommand("enableVertexAttribArray", eLex.reserved);
AddCommand("bindBuffer", eLex.reserved);
AddCommand("ARRAY_BUFFER", eLex.reserved);
AddCommand("SHORT", eLex.reserved);
AddCommand("BYTE", eLex.reserved);
AddCommand("UNSIGNED_BYTE", eLex.reserved);
AddCommand("FIXED", eLex.reserved);
AddCommand("FLOAT", eLex.reserved);
AddCommand("UNSIGNED_SHORT", eLex.reserved);
AddCommand("uniform2f", eLex.reserved);
AddCommand("uniform1i", eLex.reserved);
AddCommand("activeTexture", eLex.reserved);
AddCommand("clear", eLex.reserved);
AddCommand("clearColor", eLex.reserved);
AddCommand("uniformMatrix4fv", eLex.reserved);
AddCommand("linkProgram", eLex.reserved);
AddCommand("Int16Array", eLex.reserved);
AddCommand("Int32Array", eLex.reserved);
AddCommand("DYNAMIC_DRAW", eLex.reserved);
AddCommand("Float32Array", eLex.reserved);
AddCommand("texImage2D", eLex.reserved);
AddCommand("createBuffer", eLex.reserved);
AddCommand("texParameteri", eLex.reserved);
AddCommand("bufferData", eLex.reserved);
AddCommand("bufferSubData", eLex.reserved);
AddCommand("enable", eLex.reserved);
AddCommand("drawArrays", eLex.reserved);
AddCommand("blendFunc", eLex.reserved);
AddCommand("SRC_ALPHA", eLex.reserved);
AddCommand("ONE_MINUS_SRC_ALPHA", eLex.reserved);
AddCommand("BLEND", eLex.reserved);
AddCommand("blendFuncSeparate", eLex.reserved);
AddCommand("ONE", eLex.reserved);
AddCommand("ZERO", eLex.reserved);
AddCommand("TEXTURE0", eLex.reserved);
AddCommand("TEXTURE1", eLex.reserved);
AddCommand("viewport", eLex.reserved);
AddCommand("bindFramebuffer", eLex.reserved);
AddCommand("createFramebuffer", eLex.reserved);
AddCommand("createRenderbuffer", eLex.reserved);
AddCommand("bindRenderbuffer", eLex.reserved);
AddCommand("renderbufferStorage", eLex.reserved);
AddCommand("framebufferRenderbuffer", eLex.reserved);
AddCommand("bindFramebuffer", eLex.reserved);
AddCommand("framebufferTexture2D", eLex.reserved);
AddCommand("deleteFramebuffer", eLex.reserved);
AddCommand("deleteRenderbuffer", eLex.reserved);
AddCommand("deleteTexture", eLex.reserved);
AddCommand("readPixels", eLex.reserved);
AddCommand("Uint8Array", eLex.reserved);
AddCommand("FRAMEBUFFER", eLex.reserved);
AddCommand("RENDERBUFFER", eLex.reserved);
AddCommand("DEPTH_COMPONENT16", eLex.reserved);
AddCommand("COLOR_ATTACHMENT0", eLex.reserved);
AddCommand("colorMask", eLex.reserved);
AddCommand("TRIANGLES", eLex.reserved);
AddCommand("POINTS", eLex.reserved);
AddCommand("LINE_STRIP", eLex.reserved);
AddCommand("LINE_LOOP", eLex.reserved);
AddCommand("TRIANGLE_STRIP", eLex.reserved);
AddCommand("TRIANGLE_FAN", eLex.reserved);
AddCommand("LINES", eLex.reserved);
AddCommand("POINT", eLex.reserved);
AddCommand("aa_1241_kz", eLex.reserved);
}
public eLex CheckToken(string _text)
{
eLex value;
if (m_CommandLookup.TryGetValue(_text, out value))
{
return value;
}
return eLex.None;
}
public void Push()
{
m_Tail--;
if (m_Tail < 0)
{
m_Tail = 99;
}
}
public void EnqueueLex(eLex _token, string _text, double _value)
{
m_Head++;
if (m_Head == 100)
{
m_Head = 0;
}
m_Tail++;
if (m_Tail == 100)
{
m_Tail = 0;
}
m_LexToken[m_Head] = _token;
m_LexText[m_Head] = _text;
m_LexValue[m_Head] = _value;
}
public char NextChar()
{
if (m_Index >= m_Text.Length)
{
return ' ';
}
return m_Text[m_Index++];
}
private eLex ReadID()
{
int num = m_Index - 1;
while (m_Index < m_Text.Length)
{
char c = NextChar();
if (m_IDLookup[c] != eLex.ID)
{
m_Index--;
break;
}
}
int index = m_Index;
string text = m_Text.Substring(num, index - num);
eLex value;
if (m_CommandLookup.TryGetValue(text, out value))
{
EnqueueLex(value, text, 0.0);
return value;
}
EnqueueLex(eLex.ID, text, 0.0);
return eLex.ID;
}
private eLex ReadHEX()
{
int index = m_Index;
m_Index += 2;
long num = 0L;
while (m_Index < m_Text.Length)
{
char c = NextChar();
int num2 = m_HexLookup[c];
if (num2 == -1)
{
m_Index--;
break;
}
num = (num << 4) + num2;
}
int index2 = m_Index;
string text = m_Text.Substring(index, index2 - index);
EnqueueLex(eLex.Decimal, text, num);
return eLex.Decimal;
}
private eLex ReadBIN()
{
int num = m_Index - 1;
long num2 = 0L;
while (m_Index < m_Text.Length)
{
char c = NextChar();
int num3 = m_BinLookup[c];
if (num3 == -1)
{
m_Index--;
break;
}
num2 = (num2 << 1) + num3;
}
int index = m_Index;
string text = m_Text.Substring(num, index - num);
EnqueueLex(eLex.Decimal, text, num2);
return eLex.Decimal;
}
private eLex ReadString1()
{
if (!m_pObfuscate.EncodeStrings)
{
int num = m_Index - 1;
long num2 = 0L;
while (m_Index < m_Text.Length)
{
switch (NextChar())
{
case '\\':
{
char c = NextChar();
continue;
}
default:
continue;
case '"':
break;
}
break;
}
int index = m_Index;
string text = m_Text.Substring(num, index - num);
EnqueueLex(eLex.String, text, num2);
return eLex.String;
}
long num3 = 0L;
char c2;
string text2;
for (text2 = "\""; m_Index < m_Text.Length; text2 += c2)
{
c2 = NextChar();
switch (c2)
{
case '\\':
c2 = NextChar();
continue;
default:
continue;
case '"':
break;
}
break;
}
text2 += "\"";
EnqueueLex(eLex.String, text2, num3);
return eLex.String;
}
private eLex ReadString2()
{
if (!m_pObfuscate.EncodeStrings)
{
int num = m_Index - 1;
long num2 = 0L;
while (m_Index < m_Text.Length)
{
switch (NextChar())
{
case '\\':
{
char c = NextChar();
continue;
}
default:
continue;
case '\'':
break;
}
break;
}
int index = m_Index;
string text = m_Text.Substring(num, index - num);
EnqueueLex(eLex.String, text, num2);
return eLex.String;
}
long num3 = 0L;
char c2;
string text2;
for (text2 = "\""; m_Index < m_Text.Length; text2 += c2)
{
c2 = NextChar();
switch (c2)
{
case '\\':
c2 = NextChar();
continue;
default:
continue;
case '\'':
break;
}
break;
}
text2 += "\"";
EnqueueLex(eLex.String, text2, num3);
return eLex.String;
}
private eLex ReadDec()
{
m_Index--;
if (m_Index + 3 < m_Text.Length && m_Text[m_Index] == '0' && (m_Text[m_Index + 1] == 'x' || m_Text[m_Index + 2] == 'X'))
{
return ReadHEX();
}
if (m_Index + 2 < m_Text.Length && m_Text[m_Index] == '1' && (m_Text[m_Index + 1] == 'e' || m_Text[m_Index + 1] == 'E') && (m_Text[m_Index + 2] == '+' || m_Text[m_Index + 2] == '-'))
{
string text = string.Format("{0}{1}{2}", m_Text[m_Index], m_Text[m_Index + 1], m_Text[m_Index + 2]);
m_Index += 3;
while (m_Index < m_Text.Length)
{
char c = NextChar();
int num = m_DecLookup[c];
if (num == -1)
{
m_Index--;
break;
}
text += c;
}
text = text.ToLower();
double value = Convert.ToDouble(text);
EnqueueLex(eLex.Decimal, text, value);
return eLex.Decimal;
}
int index = m_Index;
long num2 = 0L;
while (m_Index < m_Text.Length)
{
char c2 = NextChar();
int num3 = m_DecLookup[c2];
if (num3 == -1)
{
m_Index--;
break;
}
num2 = num2 * 10 + num3;
}
int index2 = m_Index;
string text2 = m_Text.Substring(index, index2 - index);
EnqueueLex(eLex.Decimal, text2, num2);
return eLex.Decimal;
}
private eLex CheckForComments()
{
m_Index--;
if (m_Index < m_Text.Length)
{
char c = NextChar();
char c2 = NextChar();
eLex eLex = m_TokenLookup[c];
eLex eLex2 = m_TokenLookup[c2];
if (eLex == eLex.Divide && eLex2 == eLex.Divide)
{
while (m_Index < m_Text.Length)
{
c = NextChar();
eLex = eLex.ID;
if (c >= '\0' && c <= 'ÿ')
{
eLex = m_TokenLookup[c];
}
if (eLex == eLex.EOF || eLex == eLex.NewLine)
{
c = NextChar();
if (eLex != eLex.EOF && eLex != eLex.NewLine)
{
m_Index--;
}
break;
}
}
return eLex.Comment;
}
if (eLex == eLex.Divide && eLex2 == eLex.Star)
{
int num = 1;
while (m_Index < m_Text.Length)
{
c = NextChar();
c2 = NextChar();
eLex = eLex.ID;
eLex2 = eLex.ID;
if (c >= '\0' && c <= 'ÿ')
{
eLex = m_TokenLookup[c];
}
if (c2 >= '\0' && c2 <= 'ÿ')
{
eLex2 = m_TokenLookup[c2];
}
if (eLex == eLex.Divide && eLex2 == eLex.Star)
{
num++;
}
if (eLex == eLex.Star && eLex2 == eLex.Divide)
{
num--;
if (num == 0)
{
break;
}
}
m_Index--;
}
return eLex.Comment;
}
m_Index--;
EnqueueLex(eLex.Divide, "/", 0.0);
return eLex.Divide;
}
return GMAssetCompiler.eLex.Divide;
}
public eLex MultiReadToken(char _c, eLex _token)
{
if (m_Index < m_Text.Length)
{
char c = NextChar();
eLex eLex = m_SymbolLookup2[c];
if (eLex != 0)
{
EnqueueLex(eLex, new string(new char[2]
{
_c,
c
}), 0.0);
return eLex;
}
m_Index--;
}
EnqueueLex(_token, new string(new char[1]
{
_c
}), 0.0);
return _token;
}
public eLex yylex()
{
if (m_Tail != m_Head)
{
m_Tail++;
if (m_Tail == 100)
{
m_Tail = 0;
}
return m_LexToken[m_Tail];
}
while (m_Index < m_Text.Length)
{
char c = NextChar();
eLex eLex = eLex.ID;
if (c >= '\0' && c <= 'ÿ')
{
eLex = m_TokenLookup[c];
}
switch (eLex)
{
case eLex.WhiteSpace:
continue;
case eLex.Divide:
return CheckForComments();
case eLex.None:
return ReadID();
case eLex.Quotes:
return ReadString1();
case eLex.SingleQuotes:
return ReadString2();
case eLex.Decimal:
return ReadDec();
}
if (m_SymbolLookup1[c] != 0)
{
return MultiReadToken(c, eLex);
}
EnqueueLex(eLex, new string(new char[1]
{
c
}), 0.0);
return eLex;
}
EnqueueLex(GMAssetCompiler.eLex.EOF, null, 0.0);
return GMAssetCompiler.eLex.EOF;
}
}
}