mirror of
https://github.com/borbann-platform/end-of-semester-report.git
synced 2025-12-19 06:44:03 +01:00
170 lines
3.8 KiB
JavaScript
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
|