UNPKG

lakutata

Version:

An IoC-based universal application framework.

219 lines (201 loc) 4.64 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); exports.TokenizerFlags = void 0; (function(t) { t[t["None"] = 0] = "None"; t[t["Dumb"] = 1] = "Dumb"; })(exports.TokenizerFlags || (exports.TokenizerFlags = {})); function t(t) { const r = t.length; let c = 0; let o = "EOF"; let s = ""; let a = exports.TokenizerFlags.None; let f = 0; let l = 0; return { next: h, done: T }; function h(t = exports.TokenizerFlags.None) { a = t; F(); return z(); } function F() { s = ""; o = "EOF"; while (true) { if (c >= r) { return o = "EOF"; } const n = t.charAt(c); if (e(n)) { c++; continue; } switch (n) { case "(": c++; f++; return o = n; case ")": c++; l++; return o = n; case "*": c++; return o = n; case ",": c++; return o = n; case "=": c++; if ((a & exports.TokenizerFlags.Dumb) === 0) { g(); } return o = n; case "/": { c++; const e = t.charAt(c); if (e === "/") { p((t => t === "\n"), true); c++; } if (e === "*") { p((e => { const n = t.charAt(c + 1); return e === "*" && n === "/"; }), true); c++; } continue; } default: if (u(n)) { A(); return o; } c++; } } } function A() { const e = t.charAt(c); const n = ++c; while (i(t.charAt(c))) { c++; } s = "" + e + t.substring(n, c); o = s === "function" || s === "class" ? s : "ident"; if (o !== "ident") { s = ""; } return s; } function g() { p((t => { const e = f === l + 1; if (t === "," && e) { return true; } if (t === "(") { f++; return false; } if (t === ")") { l++; if (e) { return true; } } return false; })); } function p(r, u = false) { while (c < t.length) { const i = t.charAt(c); if (r(i)) { return; } if (!u) { if (e(i)) { c++; continue; } if (n(i)) { x(); continue; } } c++; } } function x() { const e = t.charAt(c); c++; while (c < t.length) { const n = t.charAt(c); const r = t.charAt(c - 1); if (n === e && r !== "\\") { c++; return; } if (e === "`") { const e = t.charAt(c + 1); if (e === "$") { const e = t.charAt(c + 2); if (e === "{") { c = c + 2; p((t => t === "}")); } } } c++; } } function z() { if (s) { return { value: s, type: o }; } return { type: o }; } function T() { return o === "EOF"; } } function e(t) { switch (t) { case "\r": case "\n": case " ": return true; } return false; } function n(t) { switch (t) { case "'": case '"': case "`": return true; } return false; } const r = /^[_$a-zA-Z\xA0-\uFFFF]$/; const c = /^[._$a-zA-Z0-9\xA0-\uFFFF]$/; function u(t) { return r.test(t); } function i(t) { return c.test(t); } exports.createTokenizer = t;