{"version":3,"file":"index.cjs","names":[],"sources":["../../../package/tabularx/provides.ts","../../../package/tabularx/libs/parser.ts","../../../package/tabularx/libs/print-raw.ts"],"sourcesContent":["import {\n    MacroInfoRecord,\n    EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {};\n\nexport const environments: EnvInfoRecord = {\n    tabularx: { signature: \"m o m\", renderInfo: { alignContent: true } },\n};\n","import { TabularPegParser } from \"@unified-latex/unified-latex-util-pegjs\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport {\n    decorateArrayForPegjs,\n    splitStringsIntoSingleChars,\n} from \"@unified-latex/unified-latex-util-pegjs\";\nimport * as TabularSpec from \"./types\";\n\nfunction createMatchers() {\n    return {\n        matchChar: (node: Ast.Node, char: string) => match.string(node, char),\n        isWhitespace: match.whitespace,\n        isGroup: match.group,\n    };\n}\n\n/**\n * Parse a tabular/tabularx specification, e.g. `\"|c|r|r|\"`. This parser assumes the specification has\n * already been parsed as LaTeX.\n */\nexport function parseTabularSpec(ast: Ast.Node[]): TabularSpec.TabularColumn[] {\n    if (!Array.isArray(ast)) {\n        throw new Error(\"You must pass an array of nodes\");\n    }\n    // All tabular spec commands are single letters, so we pre-split all strings\n    // for easy parsing.\n    ast = splitStringsIntoSingleChars(ast);\n    // We need to at functions to `nodes` so that it imitates\n    // a Javascript string. Because we're mutating, make a copy first\n    ast = decorateArrayForPegjs([...ast]);\n    // matchers are passed in via the second argument (the `options` argument)\n    // so they are available from within the Pegjs grammar.\n    return TabularPegParser.parse(ast, createMatchers());\n}\n","import * as TabularSpec from \"./types\";\nimport { printRaw as latexPrintRaw } from \"@unified-latex/unified-latex-util-print-raw\";\n\n/**\n * Print a tabular/tabularx argument specification AST to a string.\n */\nexport function printRaw(node: TabularSpec.Ast, root = false): string {\n    if (typeof node === \"string\") {\n        return node;\n    }\n\n    if (Array.isArray(node)) {\n        const sepToken = root ? \" \" : \"\";\n        return node.map((tok) => printRaw(tok)).join(sepToken);\n    }\n\n    switch (node.type) {\n        case \"vert_divider\":\n            return \"|\";\n        case \"at_divider\":\n            return `@{${latexPrintRaw(node.content)}}`;\n        case \"bang_divider\":\n            return `!{${latexPrintRaw(node.content)}}`;\n        case \"alignment\":\n            if (node.alignment === \"left\") {\n                return \"l\";\n            }\n            if (node.alignment === \"right\") {\n                return \"r\";\n            }\n            if (node.alignment === \"center\") {\n                return \"c\";\n            }\n            if (node.alignment === \"X\") {\n                return \"X\";\n            }\n            if (node.alignment === \"parbox\") {\n                if (node.baseline === \"top\") {\n                    return `p{${latexPrintRaw(node.size)}}`;\n                }\n                if (node.baseline === \"default\") {\n                    return `m{${latexPrintRaw(node.size)}}`;\n                }\n                if (node.baseline === \"bottom\") {\n                    return `b{${latexPrintRaw(node.size)}}`;\n                }\n                return `w{${latexPrintRaw(node.baseline)}}{${latexPrintRaw(\n                    node.size\n                )}}`;\n            }\n            break;\n        case \"decl_code\":\n            return latexPrintRaw(node.code);\n\n        case \"column\":\n            const end_code = node.before_end_code\n                ? `<{${printRaw(node.before_end_code)}}`\n                : \"\";\n            const start_code = node.before_start_code\n                ? `>{${printRaw(node.before_start_code)}}`\n                : \"\";\n            return [\n                printRaw(node.pre_dividers),\n                start_code,\n                printRaw(node.alignment),\n                end_code,\n                printRaw(node.post_dividers),\n            ].join(\"\");\n\n        default:\n            console.warn(\n                `Unknown node type \"${(node as any).type}\" for node`,\n                node\n            );\n            return \"\";\n    }\n    return \"\";\n}\n"],"mappings":";;;;;;AAKA,IAAa,SAA0B,EAAE;AAEzC,IAAa,eAA8B,EACvC,UAAU;CAAE,WAAW;CAAS,YAAY,EAAE,cAAc,MAAM;CAAE,EACvE;;;ACAD,SAAS,iBAAiB;AACtB,QAAO;EACH,YAAY,MAAgB,SAAiB,wCAAA,MAAM,OAAO,MAAM,KAAK;EACrE,cAAc,wCAAA,MAAM;EACpB,SAAS,wCAAA,MAAM;EAClB;;;;;;AAOL,SAAgB,iBAAiB,KAA8C;AAC3E,KAAI,CAAC,MAAM,QAAQ,IAAI,CACnB,OAAM,IAAI,MAAM,kCAAkC;AAItD,QAAA,GAAA,wCAAA,6BAAkC,IAAI;AAGtC,QAAA,GAAA,wCAAA,uBAA4B,CAAC,GAAG,IAAI,CAAC;AAGrC,QAAO,wCAAA,iBAAiB,MAAM,KAAK,gBAAgB,CAAC;;;;;;;AC3BxD,SAAgB,SAAS,MAAuB,OAAO,OAAe;AAClE,KAAI,OAAO,SAAS,SAChB,QAAO;AAGX,KAAI,MAAM,QAAQ,KAAK,EAAE;EACrB,MAAM,WAAW,OAAO,MAAM;AAC9B,SAAO,KAAK,KAAK,QAAQ,SAAS,IAAI,CAAC,CAAC,KAAK,SAAS;;AAG1D,SAAQ,KAAK,MAAb;EACI,KAAK,eACD,QAAO;EACX,KAAK,aACD,QAAO,MAAA,GAAA,4CAAA,UAAmB,KAAK,QAAQ,CAAC;EAC5C,KAAK,eACD,QAAO,MAAA,GAAA,4CAAA,UAAmB,KAAK,QAAQ,CAAC;EAC5C,KAAK;AACD,OAAI,KAAK,cAAc,OACnB,QAAO;AAEX,OAAI,KAAK,cAAc,QACnB,QAAO;AAEX,OAAI,KAAK,cAAc,SACnB,QAAO;AAEX,OAAI,KAAK,cAAc,IACnB,QAAO;AAEX,OAAI,KAAK,cAAc,UAAU;AAC7B,QAAI,KAAK,aAAa,MAClB,QAAO,MAAA,GAAA,4CAAA,UAAmB,KAAK,KAAK,CAAC;AAEzC,QAAI,KAAK,aAAa,UAClB,QAAO,MAAA,GAAA,4CAAA,UAAmB,KAAK,KAAK,CAAC;AAEzC,QAAI,KAAK,aAAa,SAClB,QAAO,MAAA,GAAA,4CAAA,UAAmB,KAAK,KAAK,CAAC;AAEzC,WAAO,MAAA,GAAA,4CAAA,UAAmB,KAAK,SAAS,CAAC,KAAA,GAAA,4CAAA,UACrC,KAAK,KACR,CAAC;;AAEN;EACJ,KAAK,YACD,SAAA,GAAA,4CAAA,UAAqB,KAAK,KAAK;EAEnC,KAAK;GACD,MAAM,WAAW,KAAK,kBAChB,KAAK,SAAS,KAAK,gBAAgB,CAAC,KACpC;GACN,MAAM,aAAa,KAAK,oBAClB,KAAK,SAAS,KAAK,kBAAkB,CAAC,KACtC;AACN,UAAO;IACH,SAAS,KAAK,aAAa;IAC3B;IACA,SAAS,KAAK,UAAU;IACxB;IACA,SAAS,KAAK,cAAc;IAC/B,CAAC,KAAK,GAAG;EAEd;AACI,WAAQ,KACJ,sBAAuB,KAAa,KAAK,aACzC,KACH;AACD,UAAO;;AAEf,QAAO"}