# unified-latex-util-pgfkeys ## What is this? Functions to help manipulate `unified-latex` Abstract Syntax Tree (AST) that contain pgfkeys-style arguments. Note that pgfkeys aren't built into `Ast.Ast`. Instead, parsing nodes as pgfkeys will produce a new (incompatible) AST. ## When should I use this? If you want to parse or manipulate macros/environments with pgfkeys-style arguments. ## Install ```bash npm install @unified-latex/unified-latex-util-pgfkeys ``` This package contains both esm and commonjs exports. To explicitly access the esm export, import the `.js` file. To explicitly access the commonjs export, import the `.cjs` file. # Functions ## `createMatchers()` ```typescript function createMatchers(): { isChar: (node: Ast.Node, char: string) => node is Ast.String; isComma: (node: Ast.Node) => node is Ast.String; isEquals: (node: Ast.Node) => node is Ast.String; isWhitespace: (node: Ast.Node) => node is Ast.Whitespace; isParbreak: (node: Ast.Node) => node is Ast.Parbreak; isSameLineComment: (node: Ast.Node) => boo... ``` ## `parsePgfkeys(ast, options)` Parse the arguments of a Pgfkeys macro. The `ast` is expected to be a comma separated list of `Item`s. Each item can have 0 or more item parts, which are separated by "=". If `itemPart` is undefined, If `options.allowParenGroups === true`, then commas that occur inside groups of parenthesis will not be parsed as separators. This is useful for parsing tikz `\foreach` loops. ```typescript function parsePgfkeys( ast: Ast.Node[], options: { allowParenGroups: boolean } ): Item[]; ``` **Parameters** | Param | Type | | :------ | :-------------------------------- | | ast | `Ast.Node[]` | | options | Omitted | ## `pgfkeysArgToObject(arg)` Parse `arg` as pgfkeys and return a JavaScript object with the results. The keys will be normalized to strings and the values will be arrays of nodes. ```typescript function pgfkeysArgToObject( arg: Ast.Node[] | Ast.Argument ): Record; ``` **Parameters** | Param | Type | | :---- | :--------------------------- | | arg | `Ast.Node[] \| Ast.Argument` | # Types ## `Item` ```typescript export type Item = { itemParts?: Ast.Node[][]; trailingComment: Ast.Comment | null; trailingComma?: boolean; leadingParbreak?: boolean; }; ```