end-of-semester-report/node_modules/@unified-latex/unified-latex-util-match/index.js
2025-05-14 16:14:35 +07:00

170 lines
3.8 KiB
JavaScript

import { printRaw } from "@unified-latex/unified-latex-util-print-raw";
function createMacroMatcher(macros) {
const macrosHash = Array.isArray(macros) ? macros.length > 0 ? typeof macros[0] === "string" ? Object.fromEntries(
macros.map((macro2) => {
if (typeof macro2 !== "string") {
throw new Error("Wrong branch of map function");
}
return [macro2, {}];
})
) : Object.fromEntries(
macros.map((macro2) => {
if (typeof macro2 === "string") {
throw new Error("Wrong branch of map function");
}
if (macro2.escapeToken != null) {
return [
macro2.content,
{ escapeToken: macro2.escapeToken }
];
}
return [macro2.content, {}];
})
) : {} : macros;
return function matchAgainstMacros(node) {
if (node == null || node.type !== "macro") {
return false;
}
const spec = macrosHash[node.content];
if (!spec) {
return false;
}
if (typeof spec === "object" && "escapeToken" in spec) {
return spec.escapeToken == null || spec.escapeToken === node.escapeToken;
}
return true;
};
}
function createEnvironmentMatcher(macros) {
const environmentsHash = Array.isArray(macros) ? Object.fromEntries(
macros.map((str) => {
return [str, {}];
})
) : macros;
return function matchAgainstEnvironments(node) {
if (!match.anyEnvironment(node)) {
return false;
}
const envName = printRaw(node.env);
const spec = environmentsHash[envName];
if (!spec) {
return false;
}
return true;
};
}
const match = {
macro(node, macroName) {
if (node == null) {
return false;
}
return node.type === "macro" && (macroName == null || node.content === macroName);
},
anyMacro(node) {
return match.macro(node);
},
environment(node, envName) {
if (node == null) {
return false;
}
return (node.type === "environment" || node.type === "mathenv") && (envName == null || printRaw(node.env) === envName);
},
anyEnvironment(node) {
return match.environment(node);
},
comment(node) {
if (node == null) {
return false;
}
return node.type === "comment";
},
parbreak(node) {
if (node == null) {
return false;
}
return node.type === "parbreak";
},
whitespace(node) {
if (node == null) {
return false;
}
return node.type === "whitespace";
},
/**
* Matches whitespace or a comment with leading whitespace.
*/
whitespaceLike(node) {
if (node == null) {
return false;
}
return node.type === "whitespace" || node.type === "whitespace" && node.leadingWhitespace === true;
},
string(node, value) {
if (node == null) {
return false;
}
return node.type === "string" && (value == null || node.content === value);
},
anyString(node) {
return match.string(node);
},
group(node) {
if (node == null) {
return false;
}
return node.type === "group";
},
argument(node) {
if (node == null) {
return false;
}
return node.type === "argument";
},
blankArgument(node) {
if (!match.argument(node)) {
return false;
}
return node.openMark === "" && node.closeMark === "" && node.content.length === 0;
},
math(node) {
if (node == null) {
return false;
}
return node.type === "displaymath" || node.type === "inlinemath";
},
createMacroMatcher,
createEnvironmentMatcher
};
const {
anyEnvironment,
anyMacro,
anyString,
argument,
blankArgument,
comment,
environment,
group,
macro,
math,
parbreak,
string,
whitespace
} = match;
export {
anyEnvironment,
anyMacro,
anyString,
argument,
blankArgument,
comment,
environment,
group,
macro,
match,
math,
parbreak,
string,
whitespace
};
//# sourceMappingURL=index.js.map