{"version":3,"file":"index.cjs","names":[],"sources":["../libs/process-environment.ts","../libs/unified-latex-process-environment.ts","../index.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { EnvInfo, EnvInfoRecord } from \"@unified-latex/unified-latex-types\";\nimport { updateRenderInfo } from \"@unified-latex/unified-latex-util-render-info\";\nimport { gobbleArguments } from \"@unified-latex/unified-latex-util-arguments\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\n\n/**\n * Performs any needed processing on the environment (as specified by `envInfo`)\n * including attaching arguments and possibly manipulating the environment's body.\n */\nexport function processEnvironment(envNode: Ast.Environment, envInfo: EnvInfo) {\n    if (envInfo.signature && envNode.args == null) {\n        const { args } = gobbleArguments(envNode.content, envInfo.signature);\n        envNode.args = args;\n    }\n\n    updateRenderInfo(envNode, envInfo.renderInfo);\n    if (typeof envInfo.processContent === \"function\") {\n        envNode.content = envInfo.processContent(envNode.content);\n    }\n}\n\n/**\n * Recursively search for and process the specified environments. Arguments are\n * consumed according to the `signature` specified. The body is processed\n * with the specified `processContent` function (if given). Any specified `renderInfo`\n * is attached to the environment node.\n */\nexport function processEnvironments(\n    tree: Ast.Ast,\n    environments: EnvInfoRecord\n) {\n    const isRelevantEnvironment = match.createEnvironmentMatcher(environments);\n\n    visit(\n        tree,\n        {\n            leave: (node) => {\n                const envName = printRaw(node.env);\n                const envInfo = environments[envName];\n                if (!envInfo) {\n                    throw new Error(\n                        `Could not find environment info for environment \"${envName}\"`\n                    );\n                }\n                processEnvironment(node, envInfo);\n            },\n        },\n        { test: isRelevantEnvironment }\n    );\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { EnvInfoRecord } from \"@unified-latex/unified-latex-types\";\nimport { Plugin } from \"unified\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { processEnvironment } from \"./process-environment\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\n\ntype PluginOptions = { environments: EnvInfoRecord } | undefined;\n\n/**\n * Unified plugin to process environment content and attach arguments.\n *\n * @param environments An object whose keys are environment names and values contains information about the environment and its argument signature.\n */\nexport const unifiedLatexProcessEnvironments: Plugin<\n    PluginOptions[],\n    Ast.Root,\n    Ast.Root\n> = function unifiedLatexAttachMacroArguments(options) {\n    const { environments = {} } = options || {};\n    const isRelevantEnvironment = match.createEnvironmentMatcher(environments);\n\n    return (tree) => {\n        if (Object.keys(environments).length === 0) {\n            console.warn(\n                \"Attempting to attach macro arguments but no macros are specified.\"\n            );\n        }\n\n        visit(\n            tree,\n            {\n                leave: (node) => {\n                    const envName = printRaw(node.env);\n                    const envInfo = environments[envName];\n                    if (!envInfo) {\n                        throw new Error(\n                            `Could not find environment info for environment \"${envName}\"`\n                        );\n                    }\n                    processEnvironment(node, envInfo);\n                },\n            },\n            { test: isRelevantEnvironment }\n        );\n    };\n};\n","export * from \"./libs/process-environment\";\nexport * from \"./libs/unified-latex-process-environment\";\n\n// NOTE: The docstring comment must be the last item in the index.ts file!\n/**\n * ## What is this?\n *\n * Functions to report on/manipulate environments in a `unified-latex` Abstract Syntax Tree (AST).\n *\n * ## When should I use this?\n *\n * If you are working on the internals of `unified-latex-util-parse` or need to make a custom parser\n * that treats environments differently.\n */\n"],"mappings":";;;;;;;;;;;AAYA,SAAgB,mBAAmB,SAA0B,SAAkB;AAC3E,KAAI,QAAQ,aAAa,QAAQ,QAAQ,MAAM;EAC3C,MAAM,EAAE,UAAA,GAAA,4CAAA,iBAAyB,QAAQ,SAAS,QAAQ,UAAU;AACpE,UAAQ,OAAO;;AAGnB,EAAA,GAAA,8CAAA,kBAAiB,SAAS,QAAQ,WAAW;AAC7C,KAAI,OAAO,QAAQ,mBAAmB,WAClC,SAAQ,UAAU,QAAQ,eAAe,QAAQ,QAAQ;;;;;;;;AAUjE,SAAgB,oBACZ,MACA,cACF;AAGE,EAAA,GAAA,wCAAA,OACI,MACA,EACI,QAAQ,SAAS;EACb,MAAM,WAAA,GAAA,4CAAA,UAAmB,KAAK,IAAI;EAClC,MAAM,UAAU,aAAa;AAC7B,MAAI,CAAC,QACD,OAAM,IAAI,MACN,oDAAoD,QAAQ,GAC/D;AAEL,qBAAmB,MAAM,QAAQ;IAExC,EACD,EAAE,MAhBwB,wCAAA,MAAM,yBAAyB,aAAa,EAgBvC,CAClC;;;;;;;;;ACpCL,IAAa,kCAIT,SAAS,iCAAiC,SAAS;CACnD,MAAM,EAAE,eAAe,EAAE,KAAK,WAAW,EAAE;CAC3C,MAAM,wBAAwB,wCAAA,MAAM,yBAAyB,aAAa;AAE1E,SAAQ,SAAS;AACb,MAAI,OAAO,KAAK,aAAa,CAAC,WAAW,EACrC,SAAQ,KACJ,oEACH;AAGL,GAAA,GAAA,wCAAA,OACI,MACA,EACI,QAAQ,SAAS;GACb,MAAM,WAAA,GAAA,4CAAA,UAAmB,KAAK,IAAI;GAClC,MAAM,UAAU,aAAa;AAC7B,OAAI,CAAC,QACD,OAAM,IAAI,MACN,oDAAoD,QAAQ,GAC/D;AAEL,sBAAmB,MAAM,QAAQ;KAExC,EACD,EAAE,MAAM,uBAAuB,CAClC"}