-- Generated by Haxe 4.3.6 local _hx_hidden = {__id__=true, hx__closures=true, super=true, prototype=true, __fields__=true, __ifields__=true, __class__=true, __properties__=true, __fields__=true, __name__=true} _hx_array_mt = { __newindex = function(t,k,v) local len = t.length t.length = k >= len and (k + 1) or len rawset(t,k,v) end } function _hx_is_array(o) return type(o) == "table" and o.__enum__ == nil and getmetatable(o) == _hx_array_mt end function _hx_tab_array(tab, length) tab.length = length return setmetatable(tab, _hx_array_mt) end function _hx_print_class(obj, depth) local first = true local result = '' for k,v in pairs(obj) do if _hx_hidden[k] == nil then if first then first = false else result = result .. ', ' end if _hx_hidden[k] == nil then result = result .. k .. ':' .. _hx_tostring(v, depth+1) end end end return '{ ' .. result .. ' }' end function _hx_print_enum(o, depth) if o.length == 2 then return o[0] else local str = o[0] .. "(" for i = 2, (o.length-1) do if i ~= 2 then str = str .. "," .. _hx_tostring(o[i], depth+1) else str = str .. _hx_tostring(o[i], depth+1) end end return str .. ")" end end function _hx_tostring(obj, depth) if depth == nil then depth = 0 elseif depth > 5 then return "<...>" end local tstr = _G.type(obj) if tstr == "string" then return obj elseif tstr == "nil" then return "null" elseif tstr == "number" then if obj == _G.math.POSITIVE_INFINITY then return "Infinity" elseif obj == _G.math.NEGATIVE_INFINITY then return "-Infinity" elseif obj == 0 then return "0" elseif obj ~= obj then return "NaN" else return _G.tostring(obj) end elseif tstr == "boolean" then return _G.tostring(obj) elseif tstr == "userdata" then local mt = _G.getmetatable(obj) if mt ~= nil and mt.__tostring ~= nil then return _G.tostring(obj) else return "" end elseif tstr == "function" then return "" elseif tstr == "thread" then return "" elseif tstr == "table" then if obj.__enum__ ~= nil then return _hx_print_enum(obj, depth) elseif obj.toString ~= nil and not _hx_is_array(obj) then return obj:toString() elseif _hx_is_array(obj) then if obj.length > 5 then return "[...]" else local str = "" for i=0, (obj.length-1) do if i == 0 then str = str .. _hx_tostring(obj[i], depth+1) else str = str .. "," .. _hx_tostring(obj[i], depth+1) end end return "[" .. str .. "]" end elseif obj.__class__ ~= nil then return _hx_print_class(obj, depth) else local buffer = {} local ref = obj if obj.__fields__ ~= nil then ref = obj.__fields__ end for k,v in pairs(ref) do if _hx_hidden[k] == nil then _G.table.insert(buffer, _hx_tostring(k, depth+1) .. ' : ' .. _hx_tostring(obj[k], depth+1)) end end return "{ " .. table.concat(buffer, ", ") .. " }" end else _G.error("Unknown Lua type", 0) return "" end end local function _hx_obj_newindex(t,k,v) t.__fields__[k] = true rawset(t,k,v) end local _hx_obj_mt = {__newindex=_hx_obj_newindex, __tostring=_hx_tostring} local function _hx_a(...) local __fields__ = {}; local ret = {__fields__ = __fields__}; local max = select('#',...); local tab = {...}; local cur = 1; while cur < max do local v = tab[cur]; __fields__[v] = true; ret[v] = tab[cur+1]; cur = cur + 2 end return setmetatable(ret, _hx_obj_mt) end local function _hx_e() return setmetatable({__fields__ = {}}, _hx_obj_mt) end local function _hx_o(obj) return setmetatable(obj, _hx_obj_mt) end local function _hx_new(prototype) return setmetatable({__fields__ = {}}, {__newindex=_hx_obj_newindex, __index=prototype, __tostring=_hx_tostring}) end function _hx_field_arr(obj) local res = {} local idx = 0 if obj.__fields__ ~= nil then obj = obj.__fields__ end for k,v in pairs(obj) do if _hx_hidden[k] == nil then res[idx] = k idx = idx + 1 end end return _hx_tab_array(res, idx) end local _hxClasses = {} local Int = _hx_e(); local Dynamic = _hx_e(); local Float = _hx_e(); local Bool = _hx_e(); local Class = _hx_e(); local Enum = _hx_e(); local _hx_exports = _hx_exports or {} _hx_exports["xrfragment"] = _hx_exports["xrfragment"] or _hx_e() local Array = _hx_e() __lua_lib_lrexlib_Rex = _G.require("rex_pcre2") __lua_lib_luautf8_Utf8 = _G.require("lua-utf8") local EReg = _hx_e() local Math = _hx_e() local Reflect = _hx_e() local String = _hx_e() local Std = _hx_e() local StringBuf = _hx_e() local StringTools = _hx_e() __haxe_IMap = _hx_e() __haxe_Exception = _hx_e() __haxe_Log = _hx_e() __haxe_NativeStackTrace = _hx_e() __haxe__Template_TemplateExpr = _hx_e() __haxe_iterators_ArrayIterator = _hx_e() __haxe_Template = _hx_e() __haxe_ValueException = _hx_e() __haxe_ds_List = _hx_e() __haxe_ds__List_ListNode = _hx_e() __haxe_ds_StringMap = _hx_e() __haxe_exceptions_PosException = _hx_e() __haxe_exceptions_NotImplementedException = _hx_e() __haxe_iterators_ArrayKeyValueIterator = _hx_e() __lua_Boot = _hx_e() __lua_UserData = _hx_e() __lua_Lib = _hx_e() __lua_Thread = _hx_e() __xrfragment_Filter = _hx_e() __xrfragment_Parser = _hx_e() __xrfragment_URI = _hx_e() __xrfragment_XRF = _hx_e() local _hx_bind, _hx_bit, _hx_staticToInstance, _hx_funcToField, _hx_maxn, _hx_print, _hx_apply_self, _hx_box_mr, _hx_bit_clamp, _hx_table, _hx_bit_raw local _hx_pcall_default = {}; local _hx_pcall_break = {}; Array.new = function() local self = _hx_new(Array.prototype) Array.super(self) return self end Array.super = function(self) _hx_tab_array(self, 0); end Array.__name__ = true Array.prototype = _hx_e(); Array.prototype.concat = function(self,a) local _g = _hx_tab_array({}, 0); local _g1 = 0; local _g2 = self; while (_g1 < _g2.length) do _hx_do_first_1 = false; local i = _g2[_g1]; _g1 = _g1 + 1; _g:push(i); end; local ret = _g; local _g = 0; while (_g < a.length) do _hx_do_first_1 = false; local i = a[_g]; _g = _g + 1; ret:push(i); end; do return ret end end Array.prototype.join = function(self,sep) local tbl = ({}); local _g_current = 0; local _g_array = self; while (_g_current < _g_array.length) do _hx_do_first_1 = false; _g_current = _g_current + 1; local i = _g_array[_g_current - 1]; _G.table.insert(tbl, Std.string(i)); end; do return _G.table.concat(tbl, sep) end end Array.prototype.pop = function(self) if (self.length == 0) then do return nil end; end; local ret = self[self.length - 1]; self[self.length - 1] = nil; self.length = self.length - 1; do return ret end end Array.prototype.push = function(self,x) self[self.length] = x; do return self.length end end Array.prototype.reverse = function(self) local tmp; local i = 0; while (i < Std.int(self.length / 2)) do _hx_do_first_1 = false; tmp = self[i]; self[i] = self[(self.length - i) - 1]; self[(self.length - i) - 1] = tmp; i = i + 1; end; end Array.prototype.shift = function(self) if (self.length == 0) then do return nil end; end; local ret = self[0]; if (self.length == 1) then self[0] = nil; else if (self.length > 1) then self[0] = self[1]; _G.table.remove(self, 1); end; end; local tmp = self; tmp.length = tmp.length - 1; do return ret end end Array.prototype.slice = function(self,pos,_end) if ((_end == nil) or (_end > self.length)) then _end = self.length; else if (_end < 0) then _end = _G.math.fmod((self.length - (_G.math.fmod(-_end, self.length))), self.length); end; end; if (pos < 0) then pos = _G.math.fmod((self.length - (_G.math.fmod(-pos, self.length))), self.length); end; if ((pos > _end) or (pos > self.length)) then do return _hx_tab_array({}, 0) end; end; local ret = _hx_tab_array({}, 0); local _g = pos; local _g1 = _end; while (_g < _g1) do _hx_do_first_1 = false; _g = _g + 1; local i = _g - 1; ret:push(self[i]); end; do return ret end end Array.prototype.sort = function(self,f) local i = 0; local l = self.length; while (i < l) do _hx_do_first_1 = false; local swap = false; local j = 0; local max = (l - i) - 1; while (j < max) do _hx_do_first_2 = false; if (f(self[j], self[j + 1]) > 0) then local tmp = self[j + 1]; self[j + 1] = self[j]; self[j] = tmp; swap = true; end; j = j + 1; end; if (not swap) then break; end; i = i + 1; end; end Array.prototype.splice = function(self,pos,len) if ((len < 0) or (pos > self.length)) then do return _hx_tab_array({}, 0) end; else if (pos < 0) then pos = self.length - (_G.math.fmod(-pos, self.length)); end; end; len = Math.min(len, self.length - pos); local ret = _hx_tab_array({}, 0); local _g = pos; local _g1 = pos + len; while (_g < _g1) do _hx_do_first_1 = false; _g = _g + 1; local i = _g - 1; ret:push(self[i]); self[i] = self[i + len]; end; local _g = pos + len; local _g1 = self.length; while (_g < _g1) do _hx_do_first_1 = false; _g = _g + 1; local i = _g - 1; self[i] = self[i + len]; end; local tmp = self; tmp.length = tmp.length - len; do return ret end end Array.prototype.toString = function(self) local tbl = ({}); _G.table.insert(tbl, "["); _G.table.insert(tbl, self:join(",")); _G.table.insert(tbl, "]"); do return _G.table.concat(tbl, "") end end Array.prototype.unshift = function(self,x) local len = self.length; local _g = 0; local _g1 = len; while (_g < _g1) do _hx_do_first_1 = false; _g = _g + 1; local i = _g - 1; self[len - i] = self[(len - i) - 1]; end; self[0] = x; end Array.prototype.insert = function(self,pos,x) if (pos > self.length) then pos = self.length; end; if (pos < 0) then pos = self.length + pos; if (pos < 0) then pos = 0; end; end; local cur_len = self.length; while (cur_len > pos) do _hx_do_first_1 = false; self[cur_len] = self[cur_len - 1]; cur_len = cur_len - 1; end; self[pos] = x; end Array.prototype.remove = function(self,x) local _g = 0; local _g1 = self.length; while (_g < _g1) do _hx_do_first_1 = false; _g = _g + 1; local i = _g - 1; if (self[i] == x) then local _g = i; local _g1 = self.length - 1; while (_g < _g1) do _hx_do_first_2 = false; _g = _g + 1; local j = _g - 1; self[j] = self[j + 1]; end; self[self.length - 1] = nil; self.length = self.length - 1; do return true end; end; end; do return false end end Array.prototype.contains = function(self,x) local _g = 0; local _g1 = self.length; while (_g < _g1) do _hx_do_first_1 = false; _g = _g + 1; local i = _g - 1; if (self[i] == x) then do return true end; end; end; do return false end end Array.prototype.indexOf = function(self,x,fromIndex) local _end = self.length; if (fromIndex == nil) then fromIndex = 0; else if (fromIndex < 0) then fromIndex = self.length + fromIndex; if (fromIndex < 0) then fromIndex = 0; end; end; end; local _g = fromIndex; local _g1 = _end; while (_g < _g1) do _hx_do_first_1 = false; _g = _g + 1; local i = _g - 1; if (x == self[i]) then do return i end; end; end; do return -1 end end Array.prototype.lastIndexOf = function(self,x,fromIndex) if ((fromIndex == nil) or (fromIndex >= self.length)) then fromIndex = self.length - 1; else if (fromIndex < 0) then fromIndex = self.length + fromIndex; if (fromIndex < 0) then do return -1 end; end; end; end; local i = fromIndex; while (i >= 0) do _hx_do_first_1 = false; if (self[i] == x) then do return i end; else i = i - 1; end; end; do return -1 end end Array.prototype.copy = function(self) local _g = _hx_tab_array({}, 0); local _g1 = 0; local _g2 = self; while (_g1 < _g2.length) do _hx_do_first_1 = false; local i = _g2[_g1]; _g1 = _g1 + 1; _g:push(i); end; do return _g end end Array.prototype.map = function(self,f) local _g = _hx_tab_array({}, 0); local _g1 = 0; local _g2 = self; while (_g1 < _g2.length) do _hx_do_first_1 = false; local i = _g2[_g1]; _g1 = _g1 + 1; _g:push(f(i)); end; do return _g end end Array.prototype.filter = function(self,f) local _g = _hx_tab_array({}, 0); local _g1 = 0; local _g2 = self; while (_g1 < _g2.length) do _hx_do_first_1 = false; local i = _g2[_g1]; _g1 = _g1 + 1; if (f(i)) then _g:push(i); end; end; do return _g end end Array.prototype.iterator = function(self) do return __haxe_iterators_ArrayIterator.new(self) end end Array.prototype.keyValueIterator = function(self) do return __haxe_iterators_ArrayKeyValueIterator.new(self) end end Array.prototype.resize = function(self,len) if (self.length < len) then self.length = len; else if (self.length > len) then local _g = len; local _g1 = self.length; while (_g < _g1) do _hx_do_first_1 = false; _g = _g + 1; local i = _g - 1; self[i] = nil; end; self.length = len; end; end; end Array.prototype.__class__ = Array EReg.new = function(r,opt) local self = _hx_new(EReg.prototype) EReg.super(self,r,opt) return self end EReg.super = function(self,r,opt) local ropt = 0; local _g = 0; local _g1 = __lua_lib_luautf8_Utf8.len(opt); while (_g < _g1) do _hx_do_first_1 = false; _g = _g + 1; local i = _g - 1; local _g = __lua_lib_luautf8_Utf8.sub(opt, i + 1, i + 1); if (_g) == "g" then self.global = true; elseif (_g) == "i" then ropt = _hx_bit.bor(ropt,EReg.FLAGS.CASELESS); elseif (_g) == "m" then ropt = _hx_bit.bor(ropt,EReg.FLAGS.MULTILINE); elseif (_g) == "s" then ropt = _hx_bit.bor(ropt,EReg.FLAGS.DOTALL);else end; end; ropt = _hx_bit.bor(ropt,EReg.FLAGS.UTF); ropt = _hx_bit.bor(ropt,EReg.FLAGS.UCP); if (self.global == nil) then self.global = false; end; self.r = __lua_lib_lrexlib_Rex.new(r, ropt); end EReg.__name__ = true EReg.prototype = _hx_e(); EReg.prototype.match = function(self,s) if (s == nil) then do return false end; else self.m = _hx_table.pack(self.r:exec(s, 1)); self.s = s; do return self.m[1] ~= nil end; end; end EReg.prototype.matched = function(self,n) if ((self.m[1] == nil) or (n < 0)) then _G.error(__haxe_Exception.thrown("EReg::matched"),0); else if (n == 0) then local k = _G.string.sub(self.s, self.m[1], self.m[2]); do return k end; else if (__lua_Boot.__instanceof(self.m[3], _G.table)) then local mn = 2 * (n - 1); if (__lua_Boot.__instanceof(self.m[3][mn + 1], Bool)) then do return nil end; end; do return _G.string.sub(self.s, self.m[3][mn + 1], self.m[3][mn + 2]) end; else _G.error(__haxe_Exception.thrown("EReg:matched"),0); end; end; end; end EReg.prototype.matchedLeft = function(self) if (self.m[1] == nil) then _G.error(__haxe_Exception.thrown("No string matched"),0); end; do return _G.string.sub(self.s, 1, self.m[1] - 1) end end EReg.prototype.matchedRight = function(self) if (self.m[1] == nil) then _G.error(__haxe_Exception.thrown("No string matched"),0); end; do return _G.string.sub(self.s, self.m[2] + 1) end end EReg.prototype.matchedPos = function(self) local left = self:matchedLeft(); local matched = self:matched(0); if (self.m[1] == nil) then _G.error(__haxe_Exception.thrown("No string matched"),0); end; do return _hx_o({__fields__={pos=true,len=true},pos=__lua_lib_luautf8_Utf8.len(left),len=__lua_lib_luautf8_Utf8.len(matched)}) end end EReg.prototype.split = function(self,s) if (self.global) then do return __lua_Lib.fillArray(_hx_wrap_if_string_field(__lua_lib_lrexlib_Rex,'split')(s, self.r)) end; else local d = "#__delim__#"; do return __lua_Lib.fillArray(_hx_wrap_if_string_field(__lua_lib_lrexlib_Rex,'split')(self:replace(s, d), d)) end; end; end EReg.prototype.replace = function(self,s,by) local chunks = String.prototype.split(by, "$$"); local _g = _hx_tab_array({}, 0); local _g1 = 0; while (_g1 < chunks.length) do _hx_do_first_1 = false; local chunk = chunks[_g1]; _g1 = _g1 + 1; _g:push(__lua_lib_lrexlib_Rex.gsub(chunk, "\\$(\\d)", "%%%1", 1)); end; chunks = _g; by = chunks:join("$"); do return __lua_lib_lrexlib_Rex.gsub(s, self.r, by, (function() local _hx_1 if (self.global) then _hx_1 = nil; else _hx_1 = 1; end return _hx_1 end )()) end end EReg.prototype.__class__ = EReg Math.new = {} Math.__name__ = true Math.isNaN = function(f) do return f ~= f end; end Math.isFinite = function(f) if (f > -_G.math.huge) then do return f < _G.math.huge end; else do return false end; end; end Math.min = function(a,b) if (Math.isNaN(a) or Math.isNaN(b)) then do return (0/0) end; else do return _G.math.min(a, b) end; end; end Reflect.new = {} Reflect.__name__ = true Reflect.field = function(o,field) if (_G.type(o) == "string") then if (field == "length") then do return _hx_wrap_if_string_field(o,'length') end; else do return String.prototype[field] end; end; else local _hx_status, _hx_result = pcall(function() do return o[field] end; return _hx_pcall_default end) if not _hx_status and _hx_result == "_hx_pcall_break" then elseif not _hx_status then local _g = _hx_result; do return nil end; elseif _hx_result ~= _hx_pcall_default then return _hx_result end; end; end Reflect.getProperty = function(o,field) if (o == nil) then do return nil end; else if ((o.__properties__ ~= nil) and (Reflect.field(o, Std.string("get_") .. Std.string(field)) ~= nil)) then do return Reflect.callMethod(o,Reflect.field(o, Std.string("get_") .. Std.string(field)),_hx_tab_array({}, 0)) end; else do return Reflect.field(o, field) end; end; end; end Reflect.callMethod = function(o,func,args) if ((args == nil) or (args.length == 0)) then do return func(o) end; else local self_arg = false; if ((o ~= nil) and (o.__name__ == nil)) then self_arg = true; end; if (self_arg) then do return func(o, _hx_table.unpack(args, 0, args.length - 1)) end; else do return func(_hx_table.unpack(args, 0, args.length - 1)) end; end; end; end Reflect.fields = function(o) if (_G.type(o) == "string") then do return Reflect.fields(String.prototype) end; else do return _hx_field_arr(o) end; end; end Reflect.isObject = function(v) if (v == nil) then do return false end; end; local t = _G.type(v); if (not ((t == "string") or ((t == "table") and (v.__enum__ == nil)))) then if (t == "function") then do return ((function() local _hx_1 if (_G.type(v) ~= "table") then _hx_1 = false; else _hx_1 = v.__name__; end return _hx_1 end )() or (function() local _hx_2 if (_G.type(v) ~= "table") then _hx_2 = false; else _hx_2 = v.__ename__; end return _hx_2 end )()) ~= nil end; else do return false end; end; else do return true end; end; end Reflect.deleteField = function(o,field) if (not ((function() local _hx_1 if ((_G.type(o) == "function") and not ((function() local _hx_2 if (_G.type(o) ~= "table") then _hx_2 = false; else _hx_2 = o.__name__; end return _hx_2 end )() or (function() local _hx_3 if (_G.type(o) ~= "table") then _hx_3 = false; else _hx_3 = o.__ename__; end return _hx_3 end )())) then _hx_1 = false; elseif ((_G.type(o) == "string") and ((String.prototype[field] ~= nil) or (field == "length"))) then _hx_1 = true; elseif (o.__fields__ ~= nil) then _hx_1 = o.__fields__[field] ~= nil; else _hx_1 = o[field] ~= nil; end return _hx_1 end )())) then do return false end; end; o[field] = nil; o.__fields__[field] = nil; do return true end; end Reflect.copy = function(o) if (o == nil) then do return nil end; end; local o2 = _hx_e(); local _g = 0; local _g1 = Reflect.fields(o); while (_g < _g1.length) do _hx_do_first_1 = false; local f = _g1[_g]; _g = _g + 1; o2[f] = Reflect.field(o, f); end; do return o2 end; end String.new = function(string) local self = _hx_new(String.prototype) String.super(self,string) self = string return self end String.super = function(self,string) end String.__name__ = true String.__index = function(s,k) if (k == "length") then do return __lua_lib_luautf8_Utf8.len(s) end; else local o = String.prototype; local field = k; if ((function() local _hx_1 if ((_G.type(o) == "function") and not ((function() local _hx_2 if (_G.type(o) ~= "table") then _hx_2 = false; else _hx_2 = o.__name__; end return _hx_2 end )() or (function() local _hx_3 if (_G.type(o) ~= "table") then _hx_3 = false; else _hx_3 = o.__ename__; end return _hx_3 end )())) then _hx_1 = false; elseif ((_G.type(o) == "string") and ((String.prototype[field] ~= nil) or (field == "length"))) then _hx_1 = true; elseif (o.__fields__ ~= nil) then _hx_1 = o.__fields__[field] ~= nil; else _hx_1 = o[field] ~= nil; end return _hx_1 end )()) then do return String.prototype[k] end; else if (String.__oldindex ~= nil) then if (_G.type(String.__oldindex) == "function") then do return String.__oldindex(s, k) end; else if (_G.type(String.__oldindex) == "table") then do return String.__oldindex[k] end; end; end; do return nil end; else do return nil end; end; end; end; end String.indexOfEmpty = function(s,startIndex) local length = __lua_lib_luautf8_Utf8.len(s); if (startIndex < 0) then startIndex = length + startIndex; if (startIndex < 0) then startIndex = 0; end; end; if (startIndex > length) then do return length end; else do return startIndex end; end; end String.fromCharCode = function(code) do return __lua_lib_luautf8_Utf8.char(code) end; end String.prototype = _hx_e(); String.prototype.toUpperCase = function(self) do return __lua_lib_luautf8_Utf8.upper(self) end end String.prototype.toLowerCase = function(self) do return __lua_lib_luautf8_Utf8.lower(self) end end String.prototype.indexOf = function(self,str,startIndex) if (startIndex == nil) then startIndex = 1; else startIndex = startIndex + 1; end; if (str == "") then do return String.indexOfEmpty(self, startIndex - 1) end; end; local r = __lua_lib_luautf8_Utf8.find(self, str, startIndex, true); if ((r ~= nil) and (r > 0)) then do return r - 1 end; else do return -1 end; end; end String.prototype.lastIndexOf = function(self,str,startIndex) local ret = -1; if (startIndex == nil) then startIndex = __lua_lib_luautf8_Utf8.len(self); end; while (true) do _hx_do_first_1 = false; local p = String.prototype.indexOf(self, str, ret + 1); if (((p == -1) or (p > startIndex)) or (p == ret)) then break; end; ret = p; end; do return ret end end String.prototype.split = function(self,delimiter) local idx = 1; local ret = _hx_tab_array({}, 0); while (idx ~= nil) do _hx_do_first_1 = false; local newidx = 0; if (__lua_lib_luautf8_Utf8.len(delimiter) > 0) then newidx = __lua_lib_luautf8_Utf8.find(self, delimiter, idx, true); else if (idx >= __lua_lib_luautf8_Utf8.len(self)) then newidx = nil; else newidx = idx + 1; end; end; if (newidx ~= nil) then local match = __lua_lib_luautf8_Utf8.sub(self, idx, newidx - 1); ret:push(match); idx = newidx + __lua_lib_luautf8_Utf8.len(delimiter); else ret:push(__lua_lib_luautf8_Utf8.sub(self, idx, __lua_lib_luautf8_Utf8.len(self))); idx = nil; end; end; do return ret end end String.prototype.toString = function(self) do return self end end String.prototype.substring = function(self,startIndex,endIndex) if (endIndex == nil) then endIndex = __lua_lib_luautf8_Utf8.len(self); end; if (endIndex < 0) then endIndex = 0; end; if (startIndex < 0) then startIndex = 0; end; if (endIndex < startIndex) then do return __lua_lib_luautf8_Utf8.sub(self, endIndex + 1, startIndex) end; else do return __lua_lib_luautf8_Utf8.sub(self, startIndex + 1, endIndex) end; end; end String.prototype.charAt = function(self,index) do return __lua_lib_luautf8_Utf8.sub(self, index + 1, index + 1) end end String.prototype.charCodeAt = function(self,index) do return __lua_lib_luautf8_Utf8.byte(self, index + 1) end end String.prototype.substr = function(self,pos,len) if ((len == nil) or (len > (pos + __lua_lib_luautf8_Utf8.len(self)))) then len = __lua_lib_luautf8_Utf8.len(self); else if (len < 0) then len = __lua_lib_luautf8_Utf8.len(self) + len; end; end; if (pos < 0) then pos = __lua_lib_luautf8_Utf8.len(self) + pos; end; if (pos < 0) then pos = 0; end; do return __lua_lib_luautf8_Utf8.sub(self, pos + 1, pos + len) end end String.prototype.__class__ = String Std.new = {} Std.__name__ = true Std.string = function(s) do return _hx_tostring(s, 0) end; end Std.int = function(x) if (not Math.isFinite(x) or Math.isNaN(x)) then do return 0 end; else do return _hx_bit_clamp(x) end; end; end Std.parseInt = function(x) if (x == nil) then do return nil end; end; local sign, numString = _G.string.match(x, "^%s*([%-+]?)0[xX]([%da-fA-F]*)"); if (numString ~= nil) then if (sign == "-") then do return -_G.tonumber(numString, 16) end; else do return _G.tonumber(numString, 16) end; end; end; local intMatch = _G.string.match(x, "^%s*[%-+]?%d*"); if (intMatch == nil) then do return nil end; end; do return _G.tonumber(intMatch) end; end Std.parseFloat = function(x) if ((x == nil) or (x == "")) then do return (0/0) end; end; local digitMatch = _G.string.match(x, "^%s*[%.%-+]?[0-9]%d*"); if (digitMatch == nil) then do return (0/0) end; end; x = String.prototype.substr(x, __lua_lib_luautf8_Utf8.len(digitMatch)); local decimalMatch = _G.string.match(x, "^%.%d*"); if (decimalMatch == nil) then decimalMatch = ""; end; x = String.prototype.substr(x, __lua_lib_luautf8_Utf8.len(decimalMatch)); local eMatch = _G.string.match(x, "^[eE][+%-]?%d+"); if (eMatch == nil) then eMatch = ""; end; local result = _G.tonumber(Std.string(Std.string(digitMatch) .. Std.string(decimalMatch)) .. Std.string(eMatch)); if (result ~= nil) then do return result end; else do return (0/0) end; end; end StringBuf.new = function() local self = _hx_new(StringBuf.prototype) StringBuf.super(self) return self end StringBuf.super = function(self) self.b = ({}); self.length = 0; end StringBuf.__name__ = true StringBuf.prototype = _hx_e(); StringBuf.prototype.__class__ = StringBuf StringTools.new = {} StringTools.__name__ = true StringTools.urlDecode = function(s) s = _G.string.gsub(s, "+", " "); s = _G.string.gsub(s, "%%(%x%x)", function(h) do return _G.string.char(_G.tonumber(h, 16)) end; end); s = _G.string.gsub(s, "\r\n", "\n"); do return s end; end StringTools.isSpace = function(s,pos) if (((__lua_lib_luautf8_Utf8.len(s) == 0) or (pos < 0)) or (pos >= __lua_lib_luautf8_Utf8.len(s))) then do return false end; end; local c = __lua_lib_luautf8_Utf8.byte(s, pos + 1); if (not ((c > 8) and (c < 14))) then do return c == 32 end; else do return true end; end; end StringTools.ltrim = function(s) local l = __lua_lib_luautf8_Utf8.len(s); local r = 0; while ((r < l) and StringTools.isSpace(s, r)) do _hx_do_first_1 = false; r = r + 1; end; if (r > 0) then do return String.prototype.substr(s, r, l - r) end; else do return s end; end; end StringTools.rtrim = function(s) local l = __lua_lib_luautf8_Utf8.len(s); local r = 0; while ((r < l) and StringTools.isSpace(s, (l - r) - 1)) do _hx_do_first_1 = false; r = r + 1; end; if (r > 0) then do return String.prototype.substr(s, 0, l - r) end; else do return s end; end; end StringTools.trim = function(s) do return StringTools.ltrim(StringTools.rtrim(s)) end; end StringTools.replace = function(s,sub,by) do return String.prototype.split(s, sub):join(by) end; end __haxe_IMap.new = {} __haxe_IMap.__name__ = true __haxe_Exception.new = function(message,previous,native) local self = _hx_new(__haxe_Exception.prototype) __haxe_Exception.super(self,message,previous,native) return self end __haxe_Exception.super = function(self,message,previous,native) self.__skipStack = 0; self.__exceptionMessage = message; self.__previousException = previous; if (native ~= nil) then self.__nativeException = native; self.__nativeStack = __haxe_NativeStackTrace.exceptionStack(); else self.__nativeException = self; self.__nativeStack = __haxe_NativeStackTrace.callStack(); self.__skipStack = 1; end; end __haxe_Exception.__name__ = true __haxe_Exception.caught = function(value) if (__lua_Boot.__instanceof(value, __haxe_Exception)) then do return value end; else do return __haxe_ValueException.new(value, nil, value) end; end; end __haxe_Exception.thrown = function(value) if (__lua_Boot.__instanceof(value, __haxe_Exception)) then do return value:get_native() end; else local e = __haxe_ValueException.new(value); e.__skipStack = e.__skipStack + 1; do return e end; end; end __haxe_Exception.prototype = _hx_e(); __haxe_Exception.prototype.unwrap = function(self) do return self.__nativeException end end __haxe_Exception.prototype.toString = function(self) do return self:get_message() end end __haxe_Exception.prototype.get_message = function(self) do return self.__exceptionMessage end end __haxe_Exception.prototype.get_native = function(self) do return self.__nativeException end end __haxe_Exception.prototype.__class__ = __haxe_Exception __haxe_Exception.prototype.__properties__ = {get_native="get_native",get_message="get_message"} __haxe_Log.new = {} __haxe_Log.__name__ = true __haxe_Log.formatOutput = function(v,infos) local str = Std.string(v); if (infos == nil) then do return str end; end; local pstr = Std.string(Std.string(infos.fileName) .. Std.string(":")) .. Std.string(infos.lineNumber); if (infos.customParams ~= nil) then local _g = 0; local _g1 = infos.customParams; while (_g < _g1.length) do _hx_do_first_1 = false; local v = _g1[_g]; _g = _g + 1; str = Std.string(str) .. Std.string((Std.string(", ") .. Std.string(Std.string(v)))); end; end; do return Std.string(Std.string(pstr) .. Std.string(": ")) .. Std.string(str) end; end __haxe_Log.trace = function(v,infos) local str = __haxe_Log.formatOutput(v, infos); _hx_print(str); end __haxe_NativeStackTrace.new = {} __haxe_NativeStackTrace.__name__ = true __haxe_NativeStackTrace.saveStack = function(exception) end __haxe_NativeStackTrace.callStack = function() local _g = debug.traceback(); if (_g == nil) then do return _hx_tab_array({}, 0) end; else local s = _g; do return String.prototype.split(s, "\n"):slice(3) end; end; end __haxe_NativeStackTrace.exceptionStack = function() do return _hx_tab_array({}, 0) end; end _hxClasses["haxe._Template.TemplateExpr"] = { __ename__ = true, __constructs__ = _hx_tab_array({[0]="OpVar","OpExpr","OpIf","OpStr","OpBlock","OpForeach","OpMacro"},7)} __haxe__Template_TemplateExpr = _hxClasses["haxe._Template.TemplateExpr"]; __haxe__Template_TemplateExpr.OpVar = function(v) local _x = _hx_tab_array({[0]="OpVar",0,v,__enum__=__haxe__Template_TemplateExpr}, 3); return _x; end __haxe__Template_TemplateExpr.OpExpr = function(expr) local _x = _hx_tab_array({[0]="OpExpr",1,expr,__enum__=__haxe__Template_TemplateExpr}, 3); return _x; end __haxe__Template_TemplateExpr.OpIf = function(expr,eif,eelse) local _x = _hx_tab_array({[0]="OpIf",2,expr,eif,eelse,__enum__=__haxe__Template_TemplateExpr}, 5); return _x; end __haxe__Template_TemplateExpr.OpStr = function(str) local _x = _hx_tab_array({[0]="OpStr",3,str,__enum__=__haxe__Template_TemplateExpr}, 3); return _x; end __haxe__Template_TemplateExpr.OpBlock = function(l) local _x = _hx_tab_array({[0]="OpBlock",4,l,__enum__=__haxe__Template_TemplateExpr}, 3); return _x; end __haxe__Template_TemplateExpr.OpForeach = function(expr,loop) local _x = _hx_tab_array({[0]="OpForeach",5,expr,loop,__enum__=__haxe__Template_TemplateExpr}, 4); return _x; end __haxe__Template_TemplateExpr.OpMacro = function(name,params) local _x = _hx_tab_array({[0]="OpMacro",6,name,params,__enum__=__haxe__Template_TemplateExpr}, 4); return _x; end __haxe_iterators_ArrayIterator.new = function(array) local self = _hx_new(__haxe_iterators_ArrayIterator.prototype) __haxe_iterators_ArrayIterator.super(self,array) return self end __haxe_iterators_ArrayIterator.super = function(self,array) self.current = 0; self.array = array; end __haxe_iterators_ArrayIterator.__name__ = true __haxe_iterators_ArrayIterator.prototype = _hx_e(); __haxe_iterators_ArrayIterator.prototype.hasNext = function(self) do return self.current < self.array.length end end __haxe_iterators_ArrayIterator.prototype.next = function(self) do return self.array[(function() local _hx_obj = self; local _hx_fld = 'current'; local _ = _hx_obj[_hx_fld]; _hx_obj[_hx_fld] = _hx_obj[_hx_fld] + 1; return _; end)()] end end __haxe_iterators_ArrayIterator.prototype.__class__ = __haxe_iterators_ArrayIterator __haxe_Template.new = function(str) local self = _hx_new(__haxe_Template.prototype) __haxe_Template.super(self,str) return self end __haxe_Template.super = function(self,str) local tokens = self:parseTokens(str); self.expr = self:parseBlock(tokens); if (not tokens:isEmpty()) then _G.error(__haxe_Exception.thrown(Std.string(Std.string("Unexpected '") .. Std.string(Std.string(tokens:first().s))) .. Std.string("'")),0); end; end __haxe_Template.__name__ = true __haxe_Template.prototype = _hx_e(); __haxe_Template.prototype.execute = function(self,context,macros) self.macros = (function() local _hx_1 if (macros == nil) then _hx_1 = _hx_e(); else _hx_1 = macros; end return _hx_1 end )(); self.context = context; self.stack = __haxe_ds_List.new(); self.buf = StringBuf.new(); self:run(self.expr); do return _G.table.concat(self.buf.b) end end __haxe_Template.prototype.resolve = function(self,v) if (v == "__current__") then do return self.context end; end; if (Reflect.isObject(self.context)) then local value = Reflect.getProperty(self.context, v); local tmp; if (value == nil) then local o = self.context; tmp = (function() local _hx_1 if ((_G.type(o) == "function") and not ((function() local _hx_2 if (_G.type(o) ~= "table") then _hx_2 = false; else _hx_2 = o.__name__; end return _hx_2 end )() or (function() local _hx_3 if (_G.type(o) ~= "table") then _hx_3 = false; else _hx_3 = o.__ename__; end return _hx_3 end )())) then _hx_1 = false; elseif ((_G.type(o) == "string") and ((String.prototype[v] ~= nil) or (v == "length"))) then _hx_1 = true; elseif (o.__fields__ ~= nil) then _hx_1 = o.__fields__[v] ~= nil; else _hx_1 = o[v] ~= nil; end return _hx_1 end )(); else tmp = true; end; if (tmp) then do return value end; end; end; local _g_head = self.stack.h; while (_g_head ~= nil) do _hx_do_first_1 = false; local val = _g_head.item; _g_head = _g_head.next; local ctx = val; local value = Reflect.getProperty(ctx, v); local tmp; if (value == nil) then local o = ctx; tmp = (function() local _hx_4 if ((_G.type(o) == "function") and not ((function() local _hx_5 if (_G.type(o) ~= "table") then _hx_5 = false; else _hx_5 = o.__name__; end return _hx_5 end )() or (function() local _hx_6 if (_G.type(o) ~= "table") then _hx_6 = false; else _hx_6 = o.__ename__; end return _hx_6 end )())) then _hx_4 = false; elseif ((_G.type(o) == "string") and ((String.prototype[v] ~= nil) or (v == "length"))) then _hx_4 = true; elseif (o.__fields__ ~= nil) then _hx_4 = o.__fields__[v] ~= nil; else _hx_4 = o[v] ~= nil; end return _hx_4 end )(); else tmp = true; end; if (tmp) then do return value end; end; end; do return Reflect.field(__haxe_Template.globals, v) end end __haxe_Template.prototype.parseTokens = function(self,data) local tokens = __haxe_ds_List.new(); local _hx_continue_1 = false; while (__haxe_Template.splitter:match(data)) do _hx_do_first_1 = false; repeat local p = __haxe_Template.splitter:matchedPos(); if (p.pos > 0) then tokens:add(_hx_o({__fields__={p=true,s=true,l=true},p=String.prototype.substr(data, 0, p.pos),s=true,l=nil})); end; if (__lua_lib_luautf8_Utf8.byte(data, p.pos + 1) == 58) then tokens:add(_hx_o({__fields__={p=true,s=true,l=true},p=String.prototype.substr(data, p.pos + 2, p.len - 4),s=false,l=nil})); data = __haxe_Template.splitter:matchedRight(); break; end; local parp = p.pos + p.len; local npar = 1; local params = _hx_tab_array({}, 0); local part = ""; while (true) do _hx_do_first_2 = false; local c = __lua_lib_luautf8_Utf8.byte(data, parp + 1); parp = parp + 1; if (c == 40) then npar = npar + 1; else if (c == 41) then npar = npar - 1; if (npar <= 0) then break; end; else if (c == nil) then _G.error(__haxe_Exception.thrown("Unclosed macro parenthesis"),0); end; end; end; if ((c == 44) and (npar == 1)) then params:push(part); part = ""; else part = Std.string(part) .. Std.string(__lua_lib_luautf8_Utf8.char(c)); end; end; params:push(part); tokens:add(_hx_o({__fields__={p=true,s=true,l=true},p=__haxe_Template.splitter:matched(2),s=false,l=params})); data = String.prototype.substr(data, parp, __lua_lib_luautf8_Utf8.len(data) - parp);until true if _hx_continue_1 then _hx_continue_1 = false; break; end; end; if (__lua_lib_luautf8_Utf8.len(data) > 0) then tokens:add(_hx_o({__fields__={p=true,s=true,l=true},p=data,s=true,l=nil})); end; do return tokens end end __haxe_Template.prototype.parseBlock = function(self,tokens) local l = __haxe_ds_List.new(); while (true) do _hx_do_first_1 = false; local t = tokens:first(); if (t == nil) then break; end; if (not t.s and (((t.p == "end") or (t.p == "else")) or (String.prototype.substr(t.p, 0, 7) == "elseif "))) then break; end; l:add(self:parse(tokens)); end; if (l.length == 1) then do return l:first() end; end; do return __haxe__Template_TemplateExpr.OpBlock(l) end end __haxe_Template.prototype.parse = function(self,tokens) local t = tokens:pop(); local p = t.p; if (t.s) then do return __haxe__Template_TemplateExpr.OpStr(p) end; end; if (t.l ~= nil) then local pe = __haxe_ds_List.new(); local _g = 0; local _g1 = t.l; while (_g < _g1.length) do _hx_do_first_1 = false; local p = _g1[_g]; _g = _g + 1; pe:add(self:parseBlock(self:parseTokens(p))); end; do return __haxe__Template_TemplateExpr.OpMacro(p, pe) end; end; local kwdEnd = function(kwd) local pos = -1; local length = __lua_lib_luautf8_Utf8.len(kwd); if (String.prototype.substr(p, 0, length) == kwd) then pos = length; local s = String.prototype.substr(p, length); local _g_codes = __lua_lib_luautf8_Utf8.codes(s); local _g_str = s; local _hx_1_cp_position, _hx_1_cp_codepoint = _g_codes(_g_str, 0); local _g_codepoint = _hx_1_cp_codepoint; local _g_position = _hx_1_cp_position; while (_g_codepoint ~= nil) do _hx_do_first_1 = false; local ret = _g_codepoint; local _hx_2_cp_position, _hx_2_cp_codepoint = _g_codes(_g_str, _g_position); _g_codepoint = _hx_2_cp_codepoint; _g_position = _hx_2_cp_position; local c = ret; if (c == 32) then pos = pos + 1; else break; end; end; end; do return pos end; end; local pos = kwdEnd("if"); if (pos > 0) then p = String.prototype.substr(p, pos, __lua_lib_luautf8_Utf8.len(p) - pos); local e = self:parseExpr(p); local eif = self:parseBlock(tokens); local t = tokens:first(); local eelse; if (t == nil) then _G.error(__haxe_Exception.thrown("Unclosed 'if'"),0); end; if (t.p == "end") then tokens:pop(); eelse = nil; else if (t.p == "else") then tokens:pop(); eelse = self:parseBlock(tokens); t = tokens:pop(); if ((t == nil) or (t.p ~= "end")) then _G.error(__haxe_Exception.thrown("Unclosed 'else'"),0); end; else t.p = String.prototype.substr(t.p, 4, __lua_lib_luautf8_Utf8.len(t.p) - 4); eelse = self:parse(tokens); end; end; do return __haxe__Template_TemplateExpr.OpIf(e, eif, eelse) end; end; local pos = kwdEnd("foreach"); if (pos >= 0) then p = String.prototype.substr(p, pos, __lua_lib_luautf8_Utf8.len(p) - pos); local e = self:parseExpr(p); local efor = self:parseBlock(tokens); local t = tokens:pop(); if ((t == nil) or (t.p ~= "end")) then _G.error(__haxe_Exception.thrown("Unclosed 'foreach'"),0); end; do return __haxe__Template_TemplateExpr.OpForeach(e, efor) end; end; if (__haxe_Template.expr_splitter:match(p)) then do return __haxe__Template_TemplateExpr.OpExpr(self:parseExpr(p)) end; end; do return __haxe__Template_TemplateExpr.OpVar(p) end end __haxe_Template.prototype.parseExpr = function(self,data) local l = __haxe_ds_List.new(); local expr = data; while (__haxe_Template.expr_splitter:match(data)) do _hx_do_first_1 = false; local p = __haxe_Template.expr_splitter:matchedPos(); local k = p.pos + p.len; if (p.pos ~= 0) then l:add(_hx_o({__fields__={p=true,s=true},p=String.prototype.substr(data, 0, p.pos),s=true})); end; local p = __haxe_Template.expr_splitter:matched(0); l:add(_hx_o({__fields__={p=true,s=true},p=p,s=String.prototype.indexOf(p, "\"") >= 0})); data = __haxe_Template.expr_splitter:matchedRight(); end; if (__lua_lib_luautf8_Utf8.len(data) ~= 0) then local _g_offset = 0; local _g_s = data; while (_g_offset < __lua_lib_luautf8_Utf8.len(_g_s)) do _hx_do_first_1 = false; local _g_key = _g_offset; _g_offset = _g_offset + 1; local _g_value = __lua_lib_luautf8_Utf8.byte(_g_s, (_g_offset - 1) + 1); local i = _g_key; local c = _g_value; if (c ~= 32) then l:add(_hx_o({__fields__={p=true,s=true},p=String.prototype.substr(data, i),s=true})); break; end; end; end; local e; local _hx_status, _hx_result = pcall(function() e = self:makeExpr(l); if (not l:isEmpty()) then _G.error(__haxe_Exception.thrown(l:first().p),0); end; return _hx_pcall_default end) if not _hx_status and _hx_result == "_hx_pcall_break" then elseif not _hx_status then local _g = _hx_result; local _g1 = __haxe_Exception.caught(_g):unwrap(); if (__lua_Boot.__instanceof(_g1, String)) then local s = _g1; _G.error(__haxe_Exception.thrown(Std.string(Std.string(Std.string("Unexpected '") .. Std.string(s)) .. Std.string("' in ")) .. Std.string(expr)),0); else _G.error(_g,0); end; elseif _hx_result ~= _hx_pcall_default then return _hx_result end; do return function() local _hx_status, _hx_result = pcall(function() do return e() end; return _hx_pcall_default end) if not _hx_status and _hx_result == "_hx_pcall_break" then elseif not _hx_status then local _g = _hx_result; local exc = __haxe_Exception.caught(_g):unwrap(); _G.error(__haxe_Exception.thrown(Std.string(Std.string(Std.string("Error : ") .. Std.string(Std.string(exc))) .. Std.string(" in ")) .. Std.string(expr)),0); elseif _hx_result ~= _hx_pcall_default then return _hx_result end; end end end __haxe_Template.prototype.makeConst = function(self,v) __haxe_Template.expr_trim:match(v); v = __haxe_Template.expr_trim:matched(1); if (__lua_lib_luautf8_Utf8.byte(v, 1) == 34) then local str = String.prototype.substr(v, 1, __lua_lib_luautf8_Utf8.len(v) - 2); do return function() do return str end; end end; end; if (__haxe_Template.expr_int:match(v)) then local i = Std.parseInt(v); do return function() do return i end; end end; end; if (__haxe_Template.expr_float:match(v)) then local f = Std.parseFloat(v); do return function() do return f end; end end; end; local me = self; do return function() do return me:resolve(v) end; end end end __haxe_Template.prototype.makePath = function(self,e,l) local p = l:first(); if ((p == nil) or (p.p ~= ".")) then do return e end; end; l:pop(); local field = l:pop(); if ((field == nil) or not field.s) then _G.error(__haxe_Exception.thrown(field.p),0); end; local f = field.p; __haxe_Template.expr_trim:match(f); f = __haxe_Template.expr_trim:matched(1); do return self:makePath(function() do return Reflect.field(e(), f) end; end, l) end end __haxe_Template.prototype.makeExpr = function(self,l) do return self:makePath(self:makeExpr2(l), l) end end __haxe_Template.prototype.skipSpaces = function(self,l) local p = l:first(); while (p ~= nil) do _hx_do_first_1 = false; local s = p.p; local _g_codes = __lua_lib_luautf8_Utf8.codes(s); local _g_str = s; local _hx_1_cp_position, _hx_1_cp_codepoint = _g_codes(_g_str, 0); local _g_codepoint = _hx_1_cp_codepoint; local _g_position = _hx_1_cp_position; while (_g_codepoint ~= nil) do _hx_do_first_2 = false; local ret = _g_codepoint; local _hx_2_cp_position, _hx_2_cp_codepoint = _g_codes(_g_str, _g_position); _g_codepoint = _hx_2_cp_codepoint; _g_position = _hx_2_cp_position; local c = ret; if (c ~= 32) then do return end; end; end; l:pop(); p = l:first(); end; end __haxe_Template.prototype.makeExpr2 = function(self,l) self:skipSpaces(l); local p = l:pop(); self:skipSpaces(l); if (p == nil) then _G.error(__haxe_Exception.thrown(""),0); end; if (p.s) then do return self:makeConst(p.p) end; end; local _g = p.p; if (_g) == "!" then local e = self:makeExpr(l); do return function() local v = e(); if (v ~= nil) then do return v == false end; else do return true end; end; end end; elseif (_g) == "(" then self:skipSpaces(l); local e1 = self:makeExpr(l); self:skipSpaces(l); local p = l:pop(); if ((p == nil) or p.s) then _G.error(__haxe_Exception.thrown(p),0); end; if (p.p == ")") then do return e1 end; end; self:skipSpaces(l); local e2 = self:makeExpr(l); self:skipSpaces(l); local p2 = l:pop(); self:skipSpaces(l); if ((p2 == nil) or (p2.p ~= ")")) then _G.error(__haxe_Exception.thrown(p2),0); end; local _g = p.p; if (_g) == "!=" then do return function() do return e1() ~= e2() end; end end; elseif (_g) == "&&" then do return function() do return e1() and e2() end; end end; elseif (_g) == "*" then do return function() do return e1() * e2() end; end end; elseif (_g) == "+" then do return function() do return _hx_dyn_add(e1(),e2()) end; end end; elseif (_g) == "-" then do return function() do return e1() - e2() end; end end; elseif (_g) == "/" then do return function() do return e1() / e2() end; end end; elseif (_g) == "<" then do return function() do return e1() < e2() end; end end; elseif (_g) == "<=" then do return function() do return e1() <= e2() end; end end; elseif (_g) == "==" then do return function() do return e1() == e2() end; end end; elseif (_g) == ">" then do return function() do return e1() > e2() end; end end; elseif (_g) == ">=" then do return function() do return e1() >= e2() end; end end; elseif (_g) == "||" then do return function() do return e1() or e2() end; end end;else _G.error(__haxe_Exception.thrown(Std.string("Unknown operation ") .. Std.string(p.p)),0); end; elseif (_g) == "-" then local e = self:makeExpr(l); do return function() do return -e() end; end end; end; _G.error(__haxe_Exception.thrown(p.p),0); end __haxe_Template.prototype.run = function(self,e) local tmp = e[1]; if (tmp) == 0 then local v = e[2]; local _this = self.buf; local str = Std.string(self:resolve(v)); _G.table.insert(_this.b, str); local _this = _this; _this.length = _this.length + __lua_lib_luautf8_Utf8.len(str); elseif (tmp) == 1 then local e = e[2]; local _this = self.buf; local str = Std.string(e()); _G.table.insert(_this.b, str); local _this = _this; _this.length = _this.length + __lua_lib_luautf8_Utf8.len(str); elseif (tmp) == 2 then local e1 = e[2]; local eif = e[3]; local eelse = e[4]; local v = e1(); if ((v == nil) or (v == false)) then if (eelse ~= nil) then self:run(eelse); end; else self:run(eif); end; elseif (tmp) == 3 then local str = e[2]; local _this = self.buf; local str = Std.string(str); _G.table.insert(_this.b, str); local _this = _this; _this.length = _this.length + __lua_lib_luautf8_Utf8.len(str); elseif (tmp) == 4 then local l = e[2]; local _g_head = l.h; while (_g_head ~= nil) do _hx_do_first_1 = false; local val = _g_head.item; _g_head = _g_head.next; local e = val; self:run(e); end; elseif (tmp) == 5 then local e1 = e[2]; local loop = e[3]; local v = e1(); local _hx_status, _hx_result = pcall(function() local x = v:iterator(); if (x.hasNext == nil) then _G.error(__haxe_Exception.thrown(nil),0); end; v = x; return _hx_pcall_default end) if not _hx_status and _hx_result == "_hx_pcall_break" then elseif not _hx_status then local _g = _hx_result; local _hx_status, _hx_result = pcall(function() if (v.hasNext == nil) then _G.error(__haxe_Exception.thrown(nil),0); end; return _hx_pcall_default end) if not _hx_status and _hx_result == "_hx_pcall_break" then elseif not _hx_status then local _g = _hx_result; _G.error(__haxe_Exception.thrown(Std.string("Cannot iter on ") .. Std.string(Std.string(v))),0); elseif _hx_result ~= _hx_pcall_default then return _hx_result end; elseif _hx_result ~= _hx_pcall_default then return _hx_result end; self.stack:push(self.context); local v = v; local ctx = v; while (ctx:hasNext()) do _hx_do_first_1 = false; local ctx = ctx:next(); self.context = ctx; self:run(loop); end; self.context = self.stack:pop(); elseif (tmp) == 6 then local m = e[2]; local params = e[3]; local v = Reflect.field(self.macros, m); local pl = Array.new(); local old = self.buf; pl:push(_hx_bind(self,self.resolve)); local _g_head = params.h; while (_g_head ~= nil) do _hx_do_first_1 = false; local val = _g_head.item; _g_head = _g_head.next; local p = val; if (p[1] == 0) then local v = p[2]; pl:push(self:resolve(v)); else self.buf = StringBuf.new(); self:run(p); pl:push(_G.table.concat(self.buf.b)); end; end; self.buf = old; local _hx_status, _hx_result = pcall(function() local _this = self.buf; local str = Std.string(Reflect.callMethod(self.macros,v,pl)); _G.table.insert(_this.b, str); local _this = _this; _this.length = _this.length + __lua_lib_luautf8_Utf8.len(str); return _hx_pcall_default end) if not _hx_status and _hx_result == "_hx_pcall_break" then elseif not _hx_status then local _g = _hx_result; local e = __haxe_Exception.caught(_g):unwrap(); local plstr; local _hx_status, _hx_result = pcall(function() plstr = pl:join(","); return _hx_pcall_default end) if not _hx_status and _hx_result == "_hx_pcall_break" then elseif not _hx_status then local _g = _hx_result; plstr = "???"; elseif _hx_result ~= _hx_pcall_default then return _hx_result end; local msg = Std.string(Std.string(Std.string(Std.string(Std.string(Std.string("Macro call ") .. Std.string(m)) .. Std.string("(")) .. Std.string(plstr)) .. Std.string(") failed (")) .. Std.string(Std.string(e))) .. Std.string(")"); _G.error(__haxe_Exception.thrown(msg),0); elseif _hx_result ~= _hx_pcall_default then return _hx_result end; end; end __haxe_Template.prototype.__class__ = __haxe_Template __haxe_ValueException.new = function(value,previous,native) local self = _hx_new(__haxe_ValueException.prototype) __haxe_ValueException.super(self,value,previous,native) return self end __haxe_ValueException.super = function(self,value,previous,native) __haxe_Exception.super(self,(function() local _hx_1 if (value == nil) then _hx_1 = "null"; else _hx_1 = Std.string(value); end return _hx_1 end )(),previous,native); self.value = value; end __haxe_ValueException.__name__ = true __haxe_ValueException.prototype = _hx_e(); __haxe_ValueException.prototype.unwrap = function(self) do return self.value end end __haxe_ValueException.prototype.__class__ = __haxe_ValueException __haxe_ValueException.__super__ = __haxe_Exception setmetatable(__haxe_ValueException.prototype,{__index=__haxe_Exception.prototype}) setmetatable(__haxe_ValueException.prototype.__properties__,{__index=__haxe_Exception.prototype.__properties__}) __haxe_ds_List.new = function() local self = _hx_new(__haxe_ds_List.prototype) __haxe_ds_List.super(self) return self end __haxe_ds_List.super = function(self) self.length = 0; end __haxe_ds_List.__name__ = true __haxe_ds_List.prototype = _hx_e(); __haxe_ds_List.prototype.add = function(self,item) local next = nil; local x = __haxe_ds__List_ListNode.new(item, next); if (self.h == nil) then self.h = x; else self.q.next = x; end; self.q = x; self.length = self.length + 1; end __haxe_ds_List.prototype.push = function(self,item) local x = __haxe_ds__List_ListNode.new(item, self.h); self.h = x; if (self.q == nil) then self.q = x; end; self.length = self.length + 1; end __haxe_ds_List.prototype.first = function(self) if (self.h == nil) then do return nil end; else do return self.h.item end; end; end __haxe_ds_List.prototype.pop = function(self) if (self.h == nil) then do return nil end; end; local x = self.h.item; self.h = self.h.next; if (self.h == nil) then self.q = nil; end; self.length = self.length - 1; do return x end end __haxe_ds_List.prototype.isEmpty = function(self) do return self.h == nil end end __haxe_ds_List.prototype.toString = function(self) local s_b = ({}); local s_length = 0; local first = true; local l = self.h; local str = "{"; _G.table.insert(s_b, str); s_length = s_length + __lua_lib_luautf8_Utf8.len(str); while (l ~= nil) do _hx_do_first_1 = false; if (first) then first = false; else local str = ", "; _G.table.insert(s_b, str); s_length = s_length + __lua_lib_luautf8_Utf8.len(str); end; local str = Std.string(l.item); _G.table.insert(s_b, str); s_length = s_length + __lua_lib_luautf8_Utf8.len(str); l = l.next; end; local str = "}"; _G.table.insert(s_b, str); s_length = s_length + __lua_lib_luautf8_Utf8.len(str); do return _G.table.concat(s_b) end end __haxe_ds_List.prototype.__class__ = __haxe_ds_List __haxe_ds__List_ListNode.new = function(item,next) local self = _hx_new(__haxe_ds__List_ListNode.prototype) __haxe_ds__List_ListNode.super(self,item,next) return self end __haxe_ds__List_ListNode.super = function(self,item,next) self.item = item; self.next = next; end __haxe_ds__List_ListNode.__name__ = true __haxe_ds__List_ListNode.prototype = _hx_e(); __haxe_ds__List_ListNode.prototype.__class__ = __haxe_ds__List_ListNode __haxe_ds_StringMap.new = {} __haxe_ds_StringMap.__name__ = true __haxe_ds_StringMap.__interfaces__ = {__haxe_IMap} __haxe_exceptions_PosException.new = function(message,previous,pos) local self = _hx_new(__haxe_exceptions_PosException.prototype) __haxe_exceptions_PosException.super(self,message,previous,pos) return self end __haxe_exceptions_PosException.super = function(self,message,previous,pos) __haxe_Exception.super(self,message,previous); if (pos == nil) then self.posInfos = _hx_o({__fields__={fileName=true,lineNumber=true,className=true,methodName=true},fileName="(unknown)",lineNumber=0,className="(unknown)",methodName="(unknown)"}); else self.posInfos = pos; end; end __haxe_exceptions_PosException.__name__ = true __haxe_exceptions_PosException.prototype = _hx_e(); __haxe_exceptions_PosException.prototype.toString = function(self) do return Std.string(Std.string(Std.string(Std.string(Std.string(Std.string(Std.string(Std.string(Std.string("") .. Std.string(__haxe_Exception.prototype.toString(self))) .. Std.string(" in ")) .. Std.string(self.posInfos.className)) .. Std.string(".")) .. Std.string(self.posInfos.methodName)) .. Std.string(" at ")) .. Std.string(self.posInfos.fileName)) .. Std.string(":")) .. Std.string(self.posInfos.lineNumber) end end __haxe_exceptions_PosException.prototype.__class__ = __haxe_exceptions_PosException __haxe_exceptions_PosException.__super__ = __haxe_Exception setmetatable(__haxe_exceptions_PosException.prototype,{__index=__haxe_Exception.prototype}) setmetatable(__haxe_exceptions_PosException.prototype.__properties__,{__index=__haxe_Exception.prototype.__properties__}) __haxe_exceptions_NotImplementedException.new = function(message,previous,pos) local self = _hx_new(__haxe_exceptions_NotImplementedException.prototype) __haxe_exceptions_NotImplementedException.super(self,message,previous,pos) return self end __haxe_exceptions_NotImplementedException.super = function(self,message,previous,pos) if (message == nil) then message = "Not implemented"; end; __haxe_exceptions_PosException.super(self,message,previous,pos); end __haxe_exceptions_NotImplementedException.__name__ = true __haxe_exceptions_NotImplementedException.prototype = _hx_e(); __haxe_exceptions_NotImplementedException.prototype.__class__ = __haxe_exceptions_NotImplementedException __haxe_exceptions_NotImplementedException.__super__ = __haxe_exceptions_PosException setmetatable(__haxe_exceptions_NotImplementedException.prototype,{__index=__haxe_exceptions_PosException.prototype}) setmetatable(__haxe_exceptions_NotImplementedException.prototype.__properties__,{__index=__haxe_exceptions_PosException.prototype.__properties__}) __haxe_iterators_ArrayKeyValueIterator.new = function(array) local self = _hx_new(__haxe_iterators_ArrayKeyValueIterator.prototype) __haxe_iterators_ArrayKeyValueIterator.super(self,array) return self end __haxe_iterators_ArrayKeyValueIterator.super = function(self,array) self.array = array; end __haxe_iterators_ArrayKeyValueIterator.__name__ = true __haxe_iterators_ArrayKeyValueIterator.prototype = _hx_e(); __haxe_iterators_ArrayKeyValueIterator.prototype.__class__ = __haxe_iterators_ArrayKeyValueIterator __lua_Boot.new = {} __lua_Boot.__name__ = true __lua_Boot.__instanceof = function(o,cl) if (cl == nil) then do return false end; end; local cl1 = cl; if (cl1) == Array then do return __lua_Boot.isArray(o) end; elseif (cl1) == Bool then do return _G.type(o) == "boolean" end; elseif (cl1) == Dynamic then do return o ~= nil end; elseif (cl1) == Float then do return _G.type(o) == "number" end; elseif (cl1) == Int then if (_G.type(o) == "number") then do return _hx_bit_clamp(o) == o end; else do return false end; end; elseif (cl1) == String then do return _G.type(o) == "string" end; elseif (cl1) == _G.table then do return _G.type(o) == "table" end; elseif (cl1) == __lua_Thread then do return _G.type(o) == "thread" end; elseif (cl1) == __lua_UserData then do return _G.type(o) == "userdata" end;else if (((o ~= nil) and (_G.type(o) == "table")) and (_G.type(cl) == "table")) then local tmp; if (__lua_Boot.__instanceof(o, Array)) then tmp = Array; else if (__lua_Boot.__instanceof(o, String)) then tmp = String; else local cl = o.__class__; tmp = (function() local _hx_1 if (cl ~= nil) then _hx_1 = cl; else _hx_1 = nil; end return _hx_1 end )(); end; end; if (__lua_Boot.extendsOrImplements(tmp, cl)) then do return true end; end; if ((function() local _hx_2 if (cl == Class) then _hx_2 = o.__name__ ~= nil; else _hx_2 = false; end return _hx_2 end )()) then do return true end; end; if ((function() local _hx_3 if (cl == Enum) then _hx_3 = o.__ename__ ~= nil; else _hx_3 = false; end return _hx_3 end )()) then do return true end; end; do return o.__enum__ == cl end; else do return false end; end; end; end __lua_Boot.isArray = function(o) if (_G.type(o) == "table") then if ((o.__enum__ == nil) and (_G.getmetatable(o) ~= nil)) then do return _G.getmetatable(o).__index == Array.prototype end; else do return false end; end; else do return false end; end; end __lua_Boot.extendsOrImplements = function(cl1,cl2) if ((cl1 == nil) or (cl2 == nil)) then do return false end; else if (cl1 == cl2) then do return true end; else if (cl1.__interfaces__ ~= nil) then local intf = cl1.__interfaces__; local _g = 1; local _g1 = _hx_table.maxn(intf) + 1; while (_g < _g1) do _hx_do_first_1 = false; _g = _g + 1; local i = _g - 1; if (__lua_Boot.extendsOrImplements(intf[i], cl2)) then do return true end; end; end; end; end; end; do return __lua_Boot.extendsOrImplements(cl1.__super__, cl2) end; end __lua_UserData.new = {} __lua_UserData.__name__ = true __lua_Lib.new = {} __lua_Lib.__name__ = true __lua_Lib.fillArray = function(itr) local i = nil; local ret = _hx_tab_array({}, 0); while (true) do _hx_do_first_1 = false; i = itr(); if (not (i ~= nil)) then break; end; ret:push(i); end; do return ret end; end __lua_Thread.new = {} __lua_Thread.__name__ = true __xrfragment_Filter.new = function(str) local self = _hx_new(__xrfragment_Filter.prototype) __xrfragment_Filter.super(self,str) return self end __xrfragment_Filter.super = function(self,str) self.q = _hx_e(); self.str = ""; if (str ~= nil) then self:parse(str); end; end _hx_exports["xrfragment"]["Filter"] = __xrfragment_Filter __xrfragment_Filter.__name__ = true __xrfragment_Filter.prototype = _hx_e(); __xrfragment_Filter.prototype.toObject = function(self) do return Reflect.copy(self.q) end end __xrfragment_Filter.prototype.get = function(self) do return Reflect.copy(self.q) end end __xrfragment_Filter.prototype.parse = function(self,str) local token = String.prototype.split(str, " "); local q = _hx_e(); local process = function(str,prefix) if (prefix == nil) then prefix = ""; end; str = StringTools.trim(str); local k = String.prototype.split(str, "=")[0]; local v = String.prototype.split(str, "=")[1]; local filter = _hx_e(); if (Reflect.field(q, Std.string(prefix) .. Std.string(k))) then filter = Reflect.field(q, Std.string(prefix) .. Std.string(k)); end; if (__xrfragment_XRF.isProp:match(str)) then local oper = ""; if (String.prototype.indexOf(str, ">") ~= -1) then oper = ">"; end; if (String.prototype.indexOf(str, "<") ~= -1) then oper = "<"; end; if (__xrfragment_XRF.isExclude:match(k)) then k = String.prototype.substr(k, 1); end; v = String.prototype.substr(v, __lua_lib_luautf8_Utf8.len(oper)); if (__lua_lib_luautf8_Utf8.len(oper) == 0) then oper = "="; end; local rule = _hx_e(); if (__xrfragment_XRF.isNumber:match(v)) then local value = Std.parseFloat(v); rule[oper] = value; else rule[oper] = v; end; q.expr = rule; end; local value = (function() local _hx_1 if (__xrfragment_XRF.isDeep:match(str)) then _hx_1 = String.prototype.split(k, "*").length - 1; else _hx_1 = 0; end return _hx_1 end )(); q.deep = value; local value = (function() local _hx_2 if (__xrfragment_XRF.isExclude:match(str)) then _hx_2 = false; else _hx_2 = true; end return _hx_2 end )(); q.show = value; local value = __xrfragment_XRF.operators:replace(k, ""); q.key = value; q.value = v; end; local _g = 0; local _g1 = token.length; while (_g < _g1) do _hx_do_first_1 = false; _g = _g + 1; local i = _g - 1; process(token[i]); end; self.q = q do return self.q end end __xrfragment_Filter.prototype.test = function(self,obj) local qualify = false; local _g = 0; local _g1 = Reflect.fields(obj); while (_g < _g1.length) do _hx_do_first_1 = false; local k = _g1[_g]; _g = _g + 1; local v = Std.string(Reflect.field(obj, k)); if (self:testProperty(k, v)) then qualify = true; end; end; local _g = 0; local _g1 = Reflect.fields(obj); while (_g < _g1.length) do _hx_do_first_1 = false; local k = _g1[_g]; _g = _g + 1; local v = Std.string(Reflect.field(obj, k)); if (self:testProperty(k, v, true)) then qualify = false; end; end; do return qualify end end __xrfragment_Filter.prototype.testProperty = function(self,property,value,exclude) local conds = 0; local fails = 0; local qualify = 0; local testprop = function(expr) conds = conds + 1; fails = fails + (function() local _hx_1 if (expr) then _hx_1 = 0; else _hx_1 = 1; end return _hx_1 end )(); do return expr end; end; if (Reflect.field(self.q, value) ~= nil) then local v = Reflect.field(self.q, value); if (Reflect.field(v, property) ~= nil) then do return Reflect.field(v, property) end; end; end; if (Reflect.field(self.q, "expr")) then local f = Reflect.field(self.q, "expr"); if (not Reflect.field(self.q, "show")) then if (((Reflect.field(f, "!=") ~= nil) and testprop(Std.string(value) == Std.string(Reflect.field(f, "!=")))) and exclude) then qualify = qualify + 1; end; else if ((Reflect.field(f, "*") ~= nil) and testprop(Std.parseFloat(value) ~= nil)) then qualify = qualify + 1; end; if ((Reflect.field(f, ">") ~= nil) and testprop(Std.parseFloat(value) >= Std.parseFloat(Reflect.field(f, ">")))) then qualify = qualify + 1; end; if ((Reflect.field(f, "<") ~= nil) and testprop(Std.parseFloat(value) <= Std.parseFloat(Reflect.field(f, "<")))) then qualify = qualify + 1; end; if ((Reflect.field(f, "=") ~= nil) and (testprop(value == Reflect.field(f, "=")) or testprop(Std.parseFloat(value) == Std.parseFloat(Reflect.field(f, "="))))) then qualify = qualify + 1; end; end; end; do return qualify > 0 end end __xrfragment_Filter.prototype.__class__ = __xrfragment_Filter __xrfragment_Parser.new = {} _hx_exports["xrfragment"]["Parser"] = __xrfragment_Parser __xrfragment_Parser.__name__ = true __xrfragment_Parser.parse = function(key,value,store,index) local Frag_h = ({}); local value1 = _hx_bit.bor(_hx_bit.bor(__xrfragment_XRF.IMMUTABLE,__xrfragment_XRF.T_PREDEFINED_VIEW),__xrfragment_XRF.PV_EXECUTE); if (value1 == nil) then Frag_h["#"] = __haxe_ds_StringMap.tnull; else Frag_h["#"] = value1; end; local value1 = __xrfragment_XRF.T_URL; if (value1 == nil) then Frag_h.src = __haxe_ds_StringMap.tnull; else Frag_h.src = value1; end; local value1 = _hx_bit.bor(__xrfragment_XRF.T_URL,__xrfragment_XRF.T_PREDEFINED_VIEW); if (value1 == nil) then Frag_h.href = __haxe_ds_StringMap.tnull; else Frag_h.href = value1; end; local value1 = _hx_bit.bor(__xrfragment_XRF.IMMUTABLE,__xrfragment_XRF.T_STRING); if (value1 == nil) then Frag_h.tag = __haxe_ds_StringMap.tnull; else Frag_h.tag = value1; end; local value1 = _hx_bit.bor(_hx_bit.bor(_hx_bit.bor(_hx_bit.bor(__xrfragment_XRF.PV_OVERRIDE,__xrfragment_XRF.T_VECTOR3),__xrfragment_XRF.T_STRING),__xrfragment_XRF.METADATA),__xrfragment_XRF.NAVIGATOR); if (value1 == nil) then Frag_h.pos = __haxe_ds_StringMap.tnull; else Frag_h.pos = value1; end; local value1 = _hx_bit.bor(_hx_bit.bor(_hx_bit.bor(_hx_bit.bor(__xrfragment_XRF.QUERY_OPERATOR,__xrfragment_XRF.PV_OVERRIDE),__xrfragment_XRF.T_VECTOR3),__xrfragment_XRF.METADATA),__xrfragment_XRF.NAVIGATOR); if (value1 == nil) then Frag_h.rot = __haxe_ds_StringMap.tnull; else Frag_h.rot = value1; end; local value1 = _hx_bit.bor(_hx_bit.bor(_hx_bit.bor(_hx_bit.bor(__xrfragment_XRF.PV_OVERRIDE,__xrfragment_XRF.T_FLOAT),__xrfragment_XRF.T_VECTOR2),__xrfragment_XRF.NAVIGATOR),__xrfragment_XRF.METADATA); if (value1 == nil) then Frag_h.t = __haxe_ds_StringMap.tnull; else Frag_h.t = value1; end; local value1 = _hx_bit.bor(__xrfragment_XRF.PV_OVERRIDE,__xrfragment_XRF.T_MEDIAFRAG); if (value1 == nil) then Frag_h.s = __haxe_ds_StringMap.tnull; else Frag_h.s = value1; end; local value1 = _hx_bit.bor(__xrfragment_XRF.PV_OVERRIDE,__xrfragment_XRF.T_PREDEFINED_VIEW); if (value1 == nil) then Frag_h.loop = __haxe_ds_StringMap.tnull; else Frag_h.loop = value1; end; local value1 = _hx_bit.bor(__xrfragment_XRF.T_VECTOR2,__xrfragment_XRF.T_MEDIAFRAG); if (value1 == nil) then Frag_h.uv = __haxe_ds_StringMap.tnull; else Frag_h.uv = value1; end; local value1 = _hx_bit.bor(__xrfragment_XRF.IMMUTABLE,__xrfragment_XRF.T_STRING); if (value1 == nil) then Frag_h.namespace = __haxe_ds_StringMap.tnull; else Frag_h.namespace = value1; end; local value1 = _hx_bit.bor(__xrfragment_XRF.IMMUTABLE,__xrfragment_XRF.T_STRING); if (value1 == nil) then Frag_h.SPDX = __haxe_ds_StringMap.tnull; else Frag_h.SPDX = value1; end; local value1 = _hx_bit.bor(__xrfragment_XRF.IMMUTABLE,__xrfragment_XRF.T_STRING); if (value1 == nil) then Frag_h.unit = __haxe_ds_StringMap.tnull; else Frag_h.unit = value1; end; local value1 = _hx_bit.bor(__xrfragment_XRF.IMMUTABLE,__xrfragment_XRF.T_STRING); if (value1 == nil) then Frag_h.description = __haxe_ds_StringMap.tnull; else Frag_h.description = value1; end; local keyStripped = __xrfragment_XRF.operators:replace(key, ""); local isPVDynamic = (__lua_lib_luautf8_Utf8.len(key) > 0) and (Frag_h[key] == nil); if (isPVDynamic) then local v = __xrfragment_XRF.new(key, _hx_bit.bor(__xrfragment_XRF.PV_EXECUTE,__xrfragment_XRF.NAVIGATOR), index); v:validate(value); v.flags = __xrfragment_XRF.set(__xrfragment_XRF.T_DYNAMICKEY, v.flags); if (Frag_h[key] == nil) then v.flags = __xrfragment_XRF.set(__xrfragment_XRF.CUSTOMFRAG, v.flags); end; if (__lua_lib_luautf8_Utf8.len(value) == 0) then v.flags = __xrfragment_XRF.set(__xrfragment_XRF.T_DYNAMICKEYVALUE, v.flags); end; store[keyStripped] = v; do return true end; end; local ret = Frag_h[key]; local v = __xrfragment_XRF.new(key, (function() local _hx_1 if (ret == __haxe_ds_StringMap.tnull) then _hx_1 = nil; else _hx_1 = ret; end return _hx_1 end )(), index); if (Frag_h[key] ~= nil) then if (not v:validate(value)) then __haxe_Log.trace(Std.string(Std.string(Std.string(Std.string("⚠ fragment '") .. Std.string(key)) .. Std.string("' has incompatible value (")) .. Std.string(value)) .. Std.string(")"), _hx_o({__fields__={fileName=true,lineNumber=true,className=true,methodName=true},fileName="src/xrfragment/Parser.hx",lineNumber=67,className="xrfragment.Parser",methodName="parse"})); do return false end; end; store[keyStripped] = v; if (__xrfragment_Parser.debug) then __haxe_Log.trace(Std.string(Std.string(Std.string("✔ ") .. Std.string(key)) .. Std.string(": ")) .. Std.string(v.string), _hx_o({__fields__={fileName=true,lineNumber=true,className=true,methodName=true},fileName="src/xrfragment/Parser.hx",lineNumber=71,className="xrfragment.Parser",methodName="parse"})); end; else if (__lua_Boot.__instanceof(value, String)) then v:guessType(v, value); end; v.flags = __xrfragment_XRF.set(__xrfragment_XRF.CUSTOMFRAG, v.flags); store[keyStripped] = v; end; do return true end; end __xrfragment_Parser.getMetaData = function() local meta = _hx_o({__fields__={title=true,description=true,author=true,publisher=true,website=true,license=true},title=_hx_tab_array({[0]="title", "og:title", "dc.title"}, 3),description=_hx_tab_array({[0]="aria-description", "og:description", "dc.description"}, 3),author=_hx_tab_array({[0]="author", "dc.creator"}, 2),publisher=_hx_tab_array({[0]="publisher", "dc.publisher"}, 2),website=_hx_tab_array({[0]="og:site_name", "og:url", "dc.publisher"}, 3),license=_hx_tab_array({[0]="SPDX", "dc.rights"}, 2)}); do return meta end; end __xrfragment_URI.new = function() local self = _hx_new(__xrfragment_URI.prototype) __xrfragment_URI.super(self) return self end __xrfragment_URI.super = function(self) self.XRF = _hx_e(); self.hash = _hx_e(); self.fragment = ""; end _hx_exports["xrfragment"]["URI"] = __xrfragment_URI __xrfragment_URI.__name__ = true __xrfragment_URI.parseFragment = function(url,filter) local store = _hx_e(); if ((url == nil) or (String.prototype.indexOf(url, "#") == -1)) then do return store end; end; local fragment = String.prototype.split(url, "#"); local splitArray = String.prototype.split(fragment[1], "&"); local _g = 0; local _g1 = splitArray.length; while (_g < _g1) do _hx_do_first_1 = false; _g = _g + 1; local i = _g - 1; local splitByEqual = String.prototype.split(splitArray[i], "="); local regexPlus = EReg.new("\\+", "g"); local key = splitByEqual[0]; local value = ""; if (splitByEqual.length > 1) then if (__xrfragment_XRF.isVector:match(splitByEqual[1])) then value = splitByEqual[1]; else value = StringTools.urlDecode(regexPlus:split(splitByEqual[1]):join(" ")); end; end; local ok = __xrfragment_Parser.parse(key, value, store, i); end; if ((filter ~= nil) and (filter ~= 0)) then local _g = 0; local _g1 = Reflect.fields(store); while (_g < _g1.length) do _hx_do_first_1 = false; local key = _g1[_g]; _g = _g + 1; local xrf = Reflect.field(store, key); if (not xrf:is(filter)) then Reflect.deleteField(store, key); end; end; end; do return store end; end __xrfragment_URI.template = function(uri,vars) local parts = String.prototype.split(uri, "#"); if (parts.length == 1) then do return uri end; end; local frag = parts[1]; frag = StringTools.replace(frag, "{", "::"); frag = StringTools.replace(frag, "}", "::"); frag = __haxe_Template.new(frag):execute(vars); frag = StringTools.replace(frag, "null", ""); parts[1] = frag; do return parts:join("#") end; end __xrfragment_URI.parse = function(stringUrl,flags) local r = EReg.new("^(?:(?![^:@]+:[^:@/]*@)([^:/?#.]+):)?(?://)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:/?#]*)(?::(\\d*))?)(((/(?:[^?#](?![^?#/]*\\.[^?#/.]+(?:[?#]|$)))*/?)?([^?#/]*))(?:\\?([^#]*))?(?:#(.*))?)", ""); if (((String.prototype.indexOf(stringUrl, "://") == -1) and (__lua_lib_luautf8_Utf8.sub(stringUrl, 1, 1) ~= "/")) and (__lua_lib_luautf8_Utf8.sub(stringUrl, 1, 1) ~= "#")) then stringUrl = Std.string("/") .. Std.string(stringUrl); end; r:match(stringUrl); local url = __xrfragment_URI.new(); local _g = 0; local _g1 = __xrfragment_URI._parts.length; while (_g < _g1) do _hx_do_first_1 = false; _g = _g + 1; local i = _g - 1; url[__xrfragment_URI._parts[i]] = r:matched(i); end; if (__xrfragment_URI.isRelative(url) == true) then if ((url.directory == nil) and (url.host ~= nil)) then url.file = url.host; end; url.host = ""; end; url.hash = _hx_e(); if ((url.fragment ~= nil) and (__lua_lib_luautf8_Utf8.len(url.fragment) > 0)) then url.XRF = __xrfragment_URI.parseFragment(Std.string("#") .. Std.string(url.fragment), flags); local key; local _g = 0; local _g1 = Reflect.fields(url.XRF); while (_g < _g1.length) do _hx_do_first_1 = false; local key = _g1[_g]; _g = _g + 1; local v = Reflect.field(url.XRF, key); local this1 = url.hash; local value = Reflect.field(v, "string"); this1[key] = value; end; end; __xrfragment_URI.computeVars(url); do return url end; end __xrfragment_URI.computeVars = function(url) local r = EReg.new("//", "g"); if ((url.directory ~= nil) and (String.prototype.indexOf(url.directory, "//") ~= -1)) then url.directory = r:replace(url.directory, "/"); end; if ((url.path ~= nil) and (String.prototype.indexOf(url.path, "//") ~= -1)) then url.path = r:replace(url.path, "/"); end; if ((url.file ~= nil) and (String.prototype.indexOf(url.file, "//") ~= -1)) then url.file = r:replace(url.file, "/"); end; url.URN = Std.string(Std.string(url.scheme) .. Std.string("://")) .. Std.string(url.host); if (url.port ~= nil) then local url1 = url; url1.URN = Std.string(url1.URN) .. Std.string((Std.string(":") .. Std.string(url.port))); end; local url1 = url; url1.URN = Std.string(url1.URN) .. Std.string(url.directory); if (url.file ~= nil) then local parts = String.prototype.split(url.file, "."); if (parts.length > 1) then url.fileExt = parts:pop(); end; end; end __xrfragment_URI.toString = function(url) local result = ""; if (url.scheme ~= nil) then result = Std.string(result) .. Std.string((Std.string(url.scheme) .. Std.string("://"))); end; if (url.user ~= nil) then result = Std.string(result) .. Std.string((Std.string(url.user) .. Std.string(":"))); end; if (url.password ~= nil) then result = Std.string(result) .. Std.string((Std.string(url.password) .. Std.string("@"))); end; if (url.host ~= nil) then result = Std.string(result) .. Std.string(url.host); end; if (url.port ~= nil) then result = Std.string(result) .. Std.string((Std.string(":") .. Std.string(url.port))); end; if (url.directory ~= nil) then result = Std.string(result) .. Std.string(url.directory); end; if (url.file ~= nil) then result = Std.string(result) .. Std.string(url.file); end; if (url.query ~= nil) then result = Std.string(result) .. Std.string((Std.string("?") .. Std.string(url.query))); end; if (url.fragment ~= nil) then result = Std.string(result) .. Std.string((Std.string("#") .. Std.string(url.fragment))); end; do return result end; end __xrfragment_URI.appendURI = function(url,appendedURI) if (__xrfragment_URI.isRelative(url) == true) then do return __xrfragment_URI.appendToRelativeURI(url, appendedURI) end; else do return __xrfragment_URI.appendToAbsoluteURI(url, appendedURI) end; end; end __xrfragment_URI.isRelative = function(url) do return url.scheme == nil end; end __xrfragment_URI.appendToRelativeURI = function(url,appendedURI) if ((url.directory == nil) or (url.host == nil)) then do return __xrfragment_URI.cloneURI(appendedURI) end; end; local resultURI = __xrfragment_URI.new(); resultURI.host = url.host; resultURI.directory = url.directory; if (appendedURI.host ~= nil) then local resultURI = resultURI; resultURI.directory = Std.string(resultURI.directory) .. Std.string(appendedURI.host); end; if (appendedURI.directory ~= nil) then local directory = appendedURI.directory; if (appendedURI.host == nil) then local resultURI = resultURI; resultURI.directory = Std.string(resultURI.directory) .. Std.string(String.prototype.substr(directory, 1)); else local resultURI = resultURI; resultURI.directory = Std.string(resultURI.directory) .. Std.string(directory); end; end; if (appendedURI.file ~= nil) then resultURI.file = appendedURI.file; end; resultURI.path = Std.string(resultURI.directory) .. Std.string(resultURI.file); if (appendedURI.query ~= nil) then resultURI.query = appendedURI.query; end; if (appendedURI.fragment ~= nil) then resultURI.fragment = appendedURI.fragment; end; do return resultURI end; end __xrfragment_URI.appendToAbsoluteURI = function(url,appendedURI) local resultURI = __xrfragment_URI.new(); if (url.scheme ~= nil) then resultURI.scheme = url.scheme; end; if (url.host ~= nil) then resultURI.host = url.host; end; local directory = ""; if (url.directory ~= nil) then directory = url.directory; end; if (appendedURI.host ~= nil) then local appendedURI1 = appendedURI; appendedURI1.directory = Std.string(appendedURI1.directory) .. Std.string(appendedURI.host); end; if (appendedURI.directory ~= nil) then directory = Std.string(directory) .. Std.string(appendedURI.directory); end; resultURI.directory = directory; if (appendedURI.file ~= nil) then resultURI.file = appendedURI.file; end; resultURI.path = Std.string(resultURI.directory) .. Std.string(resultURI.file); if (appendedURI.query ~= nil) then resultURI.query = appendedURI.query; end; if (appendedURI.fragment ~= nil) then resultURI.fragment = appendedURI.fragment; end; do return resultURI end; end __xrfragment_URI.toAbsolute = function(url,newUrl) local newURI = __xrfragment_URI.parse(newUrl, 0); local resultURI = __xrfragment_URI.new(); resultURI.port = url.port; resultURI.source = newUrl; if (newURI.scheme ~= nil) then resultURI.scheme = newURI.scheme; else resultURI.scheme = url.scheme; end; if ((newURI.host ~= nil) and (__lua_lib_luautf8_Utf8.len(newURI.host) > 0)) then resultURI.host = newURI.host; resultURI.port = nil; resultURI.fragment = nil; resultURI.hash = _hx_e(); resultURI.XRF = _hx_e(); if (newURI.port ~= nil) then resultURI.port = newURI.port; end; else resultURI.host = url.host; end; local directory = ""; if (url.directory ~= nil) then directory = url.directory; end; if (((newURI.directory ~= nil) and (__lua_lib_luautf8_Utf8.sub(newURI.source, 1, 1) ~= "#")) and (__lua_lib_luautf8_Utf8.len(newURI.directory) > 0)) then if ((__lua_lib_luautf8_Utf8.sub(newUrl, 1, 1) ~= "/") and (String.prototype.indexOf(newUrl, "://") == -1)) then local stripRelative = EReg.new("\\./.*", ""); directory = stripRelative:replace(directory, ""); directory = Std.string(directory) .. Std.string(newURI.directory); else directory = newURI.directory; end; end; resultURI.directory = directory; if ((newURI.file ~= nil) and (__lua_lib_luautf8_Utf8.len(newURI.file) > 0)) then resultURI.file = newURI.file; else resultURI.file = url.file; end; resultURI.path = Std.string(resultURI.directory) .. Std.string(resultURI.file); if (newURI.query ~= nil) then resultURI.query = newURI.query; end; if (newURI.fragment ~= nil) then resultURI.fragment = newURI.fragment; end; resultURI.hash = newURI.hash; resultURI.XRF = newURI.XRF; __xrfragment_URI.computeVars(resultURI); do return resultURI end; end __xrfragment_URI.cloneURI = function(url) local clonedURI = __xrfragment_URI.new(); clonedURI.url = url.url; clonedURI.source = url.source; clonedURI.scheme = url.scheme; clonedURI.authority = url.authority; clonedURI.userInfo = url.userInfo; clonedURI.password = url.password; clonedURI.host = url.host; clonedURI.port = url.port; clonedURI.relative = url.relative; clonedURI.path = url.path; clonedURI.directory = url.directory; clonedURI.file = url.file; clonedURI.query = url.query; clonedURI.fragment = url.fragment; do return clonedURI end; end __xrfragment_URI.prototype = _hx_e(); __xrfragment_URI.prototype.__class__ = __xrfragment_URI __xrfragment_XRF.new = function(_fragment,_flags,_index) local self = _hx_new(__xrfragment_XRF.prototype) __xrfragment_XRF.super(self,_fragment,_flags,_index) return self end __xrfragment_XRF.super = function(self,_fragment,_flags,_index) self.floats = Array.new(); self.shift = Array.new(); self.fragment = _fragment; self.flags = _flags; self.index = _index; end _hx_exports["xrfragment"]["XRF"] = __xrfragment_XRF __xrfragment_XRF.__name__ = true __xrfragment_XRF.set = function(flag,flags) do return _hx_bit.bor(flags,flag) end; end __xrfragment_XRF.unset = function(flag,flags) do return _hx_bit.band(flags,_hx_bit.bnot(flag)) end; end __xrfragment_XRF.prototype = _hx_e(); __xrfragment_XRF.prototype.is = function(self,flag) if (not __lua_Boot.__instanceof(self.flags, Int)) then self.flags = 0; end; do return (_hx_bit.band(self.flags,flag)) ~= 0 end end __xrfragment_XRF.prototype.validate = function(self,value) self:guessType(self, value); local ok = true; if ((__lua_lib_luautf8_Utf8.len(value) == 0) and not self:is(__xrfragment_XRF.T_PREDEFINED_VIEW)) then ok = false; end; if ((not self:is(__xrfragment_XRF.T_FLOAT) and self:is(__xrfragment_XRF.T_VECTOR2)) and not (__lua_Boot.__instanceof(self.x, Float) and __lua_Boot.__instanceof(self.y, Float))) then ok = false; end; if ((not (self:is(__xrfragment_XRF.T_VECTOR2) or self:is(__xrfragment_XRF.T_STRING)) and self:is(__xrfragment_XRF.T_VECTOR3)) and not ((__lua_Boot.__instanceof(self.x, Float) and __lua_Boot.__instanceof(self.y, Float)) and __lua_Boot.__instanceof(self.z, Float))) then ok = false; end; do return ok end end __xrfragment_XRF.prototype.guessType = function(self,v,str) v.string = str; if (__xrfragment_XRF.isReset:match(v.fragment)) then v.reset = true; end; if (v.fragment == "loop") then v.loop = true; end; if (not __lua_Boot.__instanceof(str, String)) then do return end; end; if (__lua_lib_luautf8_Utf8.len(str) > 0) then if (__xrfragment_XRF.isXRFScheme:match(str)) then v.xrfScheme = true; str = __xrfragment_XRF.isXRFScheme:replace(str, ""); v.string = str; end; if (String.prototype.split(str, ",").length > 1) then local xyzn = String.prototype.split(str, ","); if (xyzn.length > 0) then v.x = Std.parseFloat(xyzn[0]); end; if (xyzn.length > 1) then v.y = Std.parseFloat(xyzn[1]); end; if (xyzn.length > 2) then v.z = Std.parseFloat(xyzn[2]); end; local _g = 0; local _g1 = xyzn.length; while (_g < _g1) do _hx_do_first_1 = false; _g = _g + 1; local i = _g - 1; v.shift:push(__xrfragment_XRF.isShift:match(xyzn[i])); v.floats:push(Std.parseFloat(__xrfragment_XRF.isShift:replace(xyzn[i], ""))); end; end; if (__xrfragment_XRF.isColor:match(str)) then v.color = str; end; if (__xrfragment_XRF.isFloat:match(str)) then v.x = Std.parseFloat(str); v.float = v.x; end; if (__xrfragment_XRF.isInt:match(str)) then v.int = Std.parseInt(str); v.x = v.int; v.floats:push(v.x); end; v.filter = __xrfragment_Filter.new(Std.string(Std.string(v.fragment) .. Std.string("=")) .. Std.string(v.string)); else v.filter = __xrfragment_Filter.new(v.fragment); end; end __xrfragment_XRF.prototype.__class__ = __xrfragment_XRF local hasBit32, bit32 = pcall(require, 'bit32') if hasBit32 then --if we are on Lua 5.1, bit32 will be the default. _hx_bit_raw = bit32 _hx_bit = setmetatable({}, { __index = _hx_bit_raw }) -- lua 5.2 weirdness _hx_bit.bnot = function(...) return _hx_bit_clamp(_hx_bit_raw.bnot(...)) end _hx_bit.bxor = function(...) return _hx_bit_clamp(_hx_bit_raw.bxor(...)) end else --If we do not have bit32, fallback to 'bit' local hasBit, bit = pcall(require, 'bit') if not hasBit then error("Failed to load bit or bit32") end _hx_bit_raw = bit _hx_bit = setmetatable({}, { __index = _hx_bit_raw }) end -- see https://github.com/HaxeFoundation/haxe/issues/8849 _hx_bit.bor = function(...) return _hx_bit_clamp(_hx_bit_raw.bor(...)) end _hx_bit.band = function(...) return _hx_bit_clamp(_hx_bit_raw.band(...)) end _hx_bit.arshift = function(...) return _hx_bit_clamp(_hx_bit_raw.arshift(...)) end if _hx_bit_raw then _hx_bit_clamp = function(v) if v <= 2147483647 and v >= -2147483648 then if v > 0 then return _G.math.floor(v) else return _G.math.ceil(v) end end if v > 2251798999999999 then v = v*2 end; if (v ~= v or math.abs(v) == _G.math.huge) then return nil end return _hx_bit_raw.band(v, 2147483647 ) - math.abs(_hx_bit_raw.band(v, 2147483648)) end else _hx_bit_clamp = function(v) if v < -2147483648 then return -2147483648 elseif v > 2147483647 then return 2147483647 elseif v > 0 then return _G.math.floor(v) else return _G.math.ceil(v) end end end; _hx_array_mt.__index = Array.prototype if package.loaded.luv then _hx_luv = _G.require("luv"); else _hx_luv = { run=function(mode) return false end, loop_alive=function() return false end } end local _hx_static_init = function() if (__lua_lib_lrexlib_Rex == nil) then _G.error(__haxe_Exception.thrown("Rex is missing. Please install lrexlib-pcre2."),0); end; String.__name__ = true; Array.__name__ = true;EReg.FLAGS = __lua_lib_lrexlib_Rex.flags(); __haxe_Template.splitter = EReg.new("(::[A-Za-z0-9_ ()&|!+=/><*.\"-]+::|\\$\\$([A-Za-z0-9_-]+)\\()", ""); __haxe_Template.expr_splitter = EReg.new("(\\(|\\)|[ \r\n\t]*\"[^\"]*\"[ \r\n\t]*|[!+=/><*.&|-]+)", ""); __haxe_Template.expr_trim = EReg.new("^[ ]*([^ ]+)[ ]*$", ""); __haxe_Template.expr_int = EReg.new("^[0-9]+$", ""); __haxe_Template.expr_float = EReg.new("^([+-]?)(?=\\d|,\\d)\\d*(,\\d*)?([Ee]([+-]?\\d+))?$", ""); __haxe_Template.globals = _hx_e(); __haxe_Template.hxKeepArrayIterator = __haxe_iterators_ArrayIterator.new(_hx_tab_array({}, 0)); __haxe_ds_StringMap.tnull = ({}); __xrfragment_Parser.error = ""; __xrfragment_Parser.debug = false; __xrfragment_URI.__meta__ = _hx_o({__fields__={statics=true},statics=_hx_o({__fields__={template=true},template=_hx_o({__fields__={keep=true},keep=nil})})}); __xrfragment_URI._parts = _hx_tab_array({[0]="source", "scheme", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "fragment"}, 14); __xrfragment_XRF.IMMUTABLE = 1; __xrfragment_XRF.PROP_BIND = 2; __xrfragment_XRF.QUERY_OPERATOR = 4; __xrfragment_XRF.PROMPT = 8; __xrfragment_XRF.CUSTOMFRAG = 16; __xrfragment_XRF.NAVIGATOR = 32; __xrfragment_XRF.METADATA = 64; __xrfragment_XRF.PV_OVERRIDE = 128; __xrfragment_XRF.PV_EXECUTE = 256; __xrfragment_XRF.T_COLOR = 8192; __xrfragment_XRF.T_INT = 16384; __xrfragment_XRF.T_FLOAT = 32768; __xrfragment_XRF.T_VECTOR2 = 65536; __xrfragment_XRF.T_VECTOR3 = 131072; __xrfragment_XRF.T_URL = 262144; __xrfragment_XRF.T_PREDEFINED_VIEW = 524288; __xrfragment_XRF.T_STRING = 1048576; __xrfragment_XRF.T_MEDIAFRAG = 2097152; __xrfragment_XRF.T_DYNAMICKEY = 4194304; __xrfragment_XRF.T_DYNAMICKEYVALUE = 8388608; __xrfragment_XRF.isColor = EReg.new("^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", ""); __xrfragment_XRF.isInt = EReg.new("^[-0-9]+$", ""); __xrfragment_XRF.isFloat = EReg.new("^[-0-9]+\\.[0-9]+$", ""); __xrfragment_XRF.isVector = EReg.new("([,]+|\\w)", ""); __xrfragment_XRF.isUrl = EReg.new("(://)?\\..*", ""); __xrfragment_XRF.isUrlOrPretypedView = EReg.new("(^#|://)?\\..*", ""); __xrfragment_XRF.isString = EReg.new(".*", ""); __xrfragment_XRF.operators = EReg.new("(^[-]|^[!]|[\\*]$)", "g"); __xrfragment_XRF.isProp = EReg.new("^.*=[><=]?", ""); __xrfragment_XRF.isExclude = EReg.new("^-", ""); __xrfragment_XRF.isDeep = EReg.new("\\*", ""); __xrfragment_XRF.isNumber = EReg.new("^[0-9\\.]+$", ""); __xrfragment_XRF.isMediaFrag = EReg.new("^([0-9\\.,\\*+-]+)$", ""); __xrfragment_XRF.isReset = EReg.new("^!", ""); __xrfragment_XRF.isShift = EReg.new("^(\\+|--)", ""); __xrfragment_XRF.isXRFScheme = EReg.new("^xrf://", ""); end _hx_bind = function(o,m) if m == nil then return nil end; local f; if o._hx__closures == nil then _G.rawset(o, '_hx__closures', {}); else f = o._hx__closures[m]; end if (f == nil) then f = function(...) return m(o, ...) end; o._hx__closures[m] = f; end return f; end _hx_print = print or (function() end) _hx_table = {} _hx_table.pack = _G.table.pack or function(...) return {...} end _hx_table.unpack = _G.table.unpack or _G.unpack _hx_table.maxn = _G.table.maxn or function(t) local maxn=0; for i in pairs(t) do maxn=type(i)=='number'and i>maxn and i or maxn end return maxn end; _hx_wrap_if_string_field = function(o, fld) if _G.type(o) == 'string' then if fld == 'length' then return _G.string.len(o) else return String.prototype[fld] end else return o[fld] end end _hx_dyn_add = function(a,b) if (_G.type(a) == 'string' or _G.type(b) == 'string') then return Std.string(a)..Std.string(b) else return a + b; end; end; function _hx_handle_error(obj) local message = tostring(obj) if _G.debug and _G.debug.traceback then -- level 2 to skip _hx_handle_error message = _G.debug.traceback(message, 2) end return setmetatable({}, { __tostring = function() return message end }) end _hx_static_init(); return _hx_exports