@tricoteuses/arbre-de-la-loi
Version:
Generate ASTs from the French bills & laws; manipulate & export them to Markdown, etc.
35 lines (34 loc) • 1.13 kB
JavaScript
// See Extensible Abstract Syntax Tree (xast) specification for representing XML:
// https://github.com/syntax-tree/xast
export var XastType;
(function (XastType) {
XastType["Cdata"] = "cdata";
XastType["Comment"] = "comment";
XastType["Doctype"] = "doctype";
XastType["Element"] = "element";
XastType["Instruction"] = "instruction";
XastType["Root"] = "root";
XastType["Text"] = "text";
})(XastType || (XastType = {}));
export function assertNeverXastNode(node) {
throw new Error("Unexpected XAST node: " + node);
}
export function* iterXastNodes(node, lineage) {
yield { lineage, node };
switch (node.type) {
case XastType.Cdata:
case XastType.Comment:
case XastType.Doctype:
case XastType.Instruction:
case XastType.Text:
break;
case XastType.Element:
case XastType.Root:
for (const [index, child] of node.children.entries()) {
yield* iterXastNodes(child, { index, lineage, parent: node });
}
break;
default:
assertNeverXastNode(node);
}
}