UNPKG

@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
// 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); } }