lakutata
Version:
An IoC-based universal application framework.
214 lines (198 loc) • 4.51 kB
JavaScript
/* Build Date: Mon Jan 05 2026 23:52:23 GMT+0800 (China Standard Time) */
var t;
(function(t) {
t[t["None"] = 0] = "None";
t[t["Dumb"] = 1] = "Dumb";
})(t || (t = {}));
function n(n) {
const c = n.length;
let u = 0;
let s = "EOF";
let o = "";
let a = t.None;
let h = 0;
let l = 0;
return {
next: A,
done: x
};
function A(n = t.None) {
a = n;
F();
return g();
}
function F() {
o = "";
s = "EOF";
while (true) {
if (u >= c) {
return s = "EOF";
}
const r = n.charAt(u);
if (e(r)) {
u++;
continue;
}
switch (r) {
case "(":
u++;
h++;
return s = r;
case ")":
u++;
l++;
return s = r;
case "*":
u++;
return s = r;
case ",":
u++;
return s = r;
case "=":
u++;
if ((a & t.Dumb) === 0) {
$();
}
return s = r;
case "/":
{
u++;
const t = n.charAt(u);
if (t === "/") {
b(t => t === "\n", true);
u++;
}
if (t === "*") {
b(t => {
const e = n.charAt(u + 1);
return t === "*" && e === "/";
}, true);
u++;
}
continue;
}
default:
if (i(r)) {
w();
return s;
}
u++;
}
}
}
function w() {
const t = n.charAt(u);
const e = ++u;
while (f(n.charAt(u))) {
u++;
}
o = "" + t + n.substring(e, u);
s = o === "function" || o === "class" ? o : "ident";
if (s !== "ident") {
o = "";
}
return o;
}
function $() {
b(t => {
const n = h === l + 1;
if (t === "," && n) {
return true;
}
if (t === "(") {
h++;
return false;
}
if (t === ")") {
l++;
if (n) {
return true;
}
}
return false;
});
}
function b(t, c = false) {
while (u < n.length) {
const i = n.charAt(u);
if (t(i)) {
return;
}
if (!c) {
if (e(i)) {
u++;
continue;
}
if (r(i)) {
d();
continue;
}
}
u++;
}
}
function d() {
const t = n.charAt(u);
u++;
while (u < n.length) {
const e = n.charAt(u);
const r = n.charAt(u - 1);
if (e === t && r !== "\\") {
u++;
return;
}
if (t === "`") {
const t = n.charAt(u + 1);
if (t === "$") {
const t = n.charAt(u + 2);
if (t === "{") {
u = u + 2;
b(t => t === "}");
}
}
}
u++;
}
}
function g() {
if (o) {
return {
value: o,
type: s
};
}
return {
type: s
};
}
function x() {
return s === "EOF";
}
}
function e(t) {
switch (t) {
case "\r":
case "\n":
case " ":
return true;
}
return false;
}
function r(t) {
switch (t) {
case "'":
case '"':
case "`":
return true;
}
return false;
}
const c = /^[_$a-zA-Z\xA0-\uFFFF]$/;
const u = /^[._$a-zA-Z0-9\xA0-\uFFFF]$/;
function i(t) {
return c.test(t);
}
function f(t) {
return u.test(t);
}
export { t as TokenizerFlags, n as createTokenizer };